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")) ((light, "Light"))
((meshScope, "MeshSources")) ((meshScope, "MeshSources"))
((materialsScope, "Materials")) ((materialsScope, "Materials"))
((surface, "PreviewSurface")) ((previewSurface, "PreviewSurface"))
((world, "World")) ((world, "World"))
((xformOpTransform, "xformOp:transform")) ((xformOpTransform, "xformOp:transform"))
((xformOpScale, "xformOp:scale")) ((xformOpScale, "xformOp:scale"))
@@ -710,30 +710,49 @@ class ModelWriter {
} }
void WriteMaterial(mjsMaterial *material, const pxr::SdfPath &parent_path) { void WriteMaterial(mjsMaterial *material, const pxr::SdfPath &parent_path) {
// Create a Material prim.
auto name = GetAvailablePrimName( auto name = GetAvailablePrimName(
*material->name, pxr::UsdShadeTokens->Material, parent_path); *material->name, pxr::UsdShadeTokens->Material, parent_path);
pxr::SdfPath material_path = pxr::SdfPath material_path =
CreatePrimSpec(data_, parent_path, name, pxr::UsdShadeTokens->Material); CreatePrimSpec(data_, parent_path, name, pxr::UsdShadeTokens->Material);
// Shader "PreviewSurface" // Create a Shader prim "PreviewSurface" under the Material prim.
pxr::SdfPath preview_surface_shader_path = CreatePrimSpec( pxr::SdfPath preview_surface_shader_path =
data_, material_path, kTokens->surface, pxr::UsdShadeTokens->Shader); 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( pxr::SdfPath info_id_attr = CreateAttributeSpec(
data_, preview_surface_shader_path, pxr::UsdShadeTokens->infoId, data_, preview_surface_shader_path, pxr::UsdShadeTokens->infoId,
pxr::SdfValueTypeNames->Token, pxr::SdfVariabilityUniform); pxr::SdfValueTypeNames->Token, pxr::SdfVariabilityUniform);
SetAttributeDefault(data_, info_id_attr, SetAttributeDefault(data_, info_id_attr,
pxr::UsdImagingTokens->UsdPreviewSurface); pxr::UsdImagingTokens->UsdPreviewSurface);
// Connect material's surface output to the preview surface's surface
// output.
pxr::SdfPath surface_output_attr = CreateAttributeSpec( pxr::SdfPath surface_output_attr = CreateAttributeSpec(
data_, preview_surface_shader_path, pxr::UsdShadeTokens->outputsSurface, data_, preview_surface_shader_path, pxr::UsdShadeTokens->outputsSurface,
pxr::SdfValueTypeNames->Token); 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 = pxr::SdfPath displacement_output_attr =
CreateAttributeSpec(data_, preview_surface_shader_path, CreateAttributeSpec(data_, preview_surface_shader_path,
pxr::UsdShadeTokens->outputsDisplacement, pxr::UsdShadeTokens->outputsDisplacement,
pxr::SdfValueTypeNames->Token); 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 = const pxr::SdfPath &uvmap_st_output_attr =
AddUVTextureShader(material_path, pxr::TfToken("uvmap")); AddUVTextureShader(material_path, pxr::TfToken("uvmap"));
const mjStringVec &textures = *(material->textures); 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( 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);
@@ -840,20 +861,6 @@ class ModelWriter {
pxr::GfVec3f(material->rgba[0], material->rgba[1], pxr::GfVec3f(material->rgba[0], material->rgba[1],
material->rgba[2])); 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() { void WriteMaterials() {
@@ -143,6 +143,14 @@ TEST_F(MjcfSdfFileFormatPluginTest, TestMaterials) {
stage, stage,
"/mesh_test/Materials/material_red/PreviewSurface.inputs:diffuseColor", "/mesh_test/Materials/material_red/PreviewSurface.inputs:diffuseColor",
pxr::GfVec3f(0.8, 0, 0)); 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, "/mesh_test/Materials/material_texture");
EXPECT_PRIM_VALID(stage, EXPECT_PRIM_VALID(stage,