class_docstr: A light object representing the same color of light everywhere.
  By default, this is white, which effectively means lighting is
  not used in rendering.
  
  Unlike other lights this supports an arbitrary number of channels, not just 3 for RGB.
  The ambient_color input determines the number of channels.
class_docstr_tok: ["A","light","object","representing","the","same","color","of","light","everywhere",".","By","default",",","this","is","white",",","which","effectively","means","lighting","is","not","used","in","rendering",".","Unlike","other","lights","this","supports","an","arbitrary","number","of","channels",",","not","just","3","for","RGB",".","The","ambient_color","input","determines","the","number","of","channels","."]
code: def specular(
      self, normals, points, camera_position, shininess
  ) -> torch.Tensor:
      return self._zeros_channels(points)
  
imports: import torch
  import torch.nn.functional
  from ..common.datatypes import Device
  from .utils import convert_to_tensors_and_broadcast, TensorProperties
label_desc: Use image node_id 4 for calling the AmbientLights obj's underlying member method code with example usage: obj.specular(normals, points, camera_position, shininess) and returns: self