code: def _traverse_nodes(self, renderer, gltf_node):
      # calculate transform for current node
      gltf_node.local_transform = self._calculate_node_raw_transforms(
          gltf_node
      )
  
      # if there is no transform just inherit the previous one so it can be passed to children
      if gltf_node.local_transform != None:
          gltf_node.transform = vray.Transform(
              gltf_node.transform.matrix
              * gltf_node.local_transform.matrix,
              gltf_node.transform.matrix
              * gltf_node.local_transform.offset
              + gltf_node.transform.offset,
          )
  
      # create and init the vray node, if it is already created updater all primitive geometry nodes under it
      if gltf_node.vray_node_created == True:
          self._update_nodes(renderer, gltf_node)
      else:
          self._create_vray_node(renderer, gltf_node)
  
      # traverse children recursively, children inherit root node transform as per gltf documentation
      if gltf_node.children != None:
          for child_idx in gltf_node.children:
              self.nodes[child_idx].transform = gltf_node.transform
              self._traverse_nodes(renderer, self.nodes[child_idx])
  
imports: from __future__ import print_function
  import os
  import sys
  import json
  import vray
  from .None import parserUtils
  from .None import cameraUtils
  import numpy
  from tempfile import mkstemp
  import math
  import pyquaternion
  import base64
  from ..None import testUtils
label_desc: Use image node_id 27 for calling the GltfParser obj's underlying member method code with example usage: obj._traverse_nodes(renderer, gltf_node) without return types