[Paraview] OSPRay textures and materials mapping

David E DeMarle dave.demarle at kitware.com
Tue May 22 13:51:42 EDT 2018


On Tue, May 22, 2018 at 12:34 PM, David E DeMarle <dave.demarle at kitware.com>
wrote:

>
> On Tue, May 22, 2018 at 10:34 AM, Jonathan Borduas <
> jonathan.borduas at caboma.com> wrote:
>
>> Hi David,
>>
>> I was able to complete all the steps. As you probably know, the step four
>> was tedious.
>>
>> However I couldn’t get the result I wanted since I couldn’t assign the
>> right textures to the right areas. Is there a mechanism to assign the
>> texture just like we assign materials ?
>> I guess this is what you mean by “multi-texture isn’t implemented yet”. I
>> could probably extract all objects using a connectivity filter and then
>> manually assign the textures, but again it is a tedious process for complex
>> objects.
>>
>>
> Better to do it in the code. We read in all of the texture coordinates
> when we read the .obj and all of the texture files when we read the .mtl ->
> we just aren't using the right set of texture coordinates in all cases yet.
> That is most of what I mean by multitexture.
>
> Is there a roadmap as to when the multi-texture could be implemented ?
>>
>
> I'm hoping for 5.6 in a couple of months time. Although this is important
> it may very well slip because of other priorities.
>
>

In the meantime, this python programmable filter is a workaround.

pdi = self.GetInput()

pdo = self.GetOutput()

pdo.ShallowCopy(pdi)


arraynames = []

arrays = {}

for a in range(0,pdi.GetPointData().GetNumberOfArrays()):

  array = pdi.GetPointData().GetArray(a)

  if array.GetNumberOfComponents() != 2:

    continue

  arrname = array.GetName()

  pdo.GetPointData().RemoveArray(arrname)

  arraynames.append(arrname)

  arrays[arrname] = array


tcoords = vtk.vtkFloatArray()

tcoords.SetName("TCoords")

tcoords.SetNumberOfComponents(2)

pdo.GetPointData().SetTCoords(tcoords)

# todo numpy this to make it 100x faster

for p in range(0, pdi.GetNumberOfPoints()):

  tcoord = [0,0]

  for arrname in arrays:

    candidate = arrays[arrname].GetTuple2(p)

    if candidate[0] == -1 and candidate[1] == -1:

      continue

    tcoord = candidate

  tcoords.InsertNextTuple2(tcoord[0],tcoord[1])





> It would be great to have readers that can load texture/Geometry/Materials
>> files such as .obj (.mtl and .png), .fbx and .dwg.
>>
>
> Agreed.
>
>
>> Best regards,
>>
>>
>>
>> Jonathan Borduas
>>
>>
>>
>> *From:* David E DeMarle <dave.demarle at kitware.com>
>> *Sent:* Friday, May 18, 2018 10:58 AM
>> *To:* Jonathan Borduas <jonathan.borduas at caboma.com>
>> *Cc:* paraview at public.kitware.com
>> *Subject:* Re: [Paraview] OSPRay textures and materials mapping
>>
>>
>>
>> Hi Jonathan.
>>
>>
>>
>> Yes you can do that.
>>
>>
>>
>> 1) File->Load OSPRay Materials, switch the file type from "OSPRay
>> Material Files (*.json)"  to "Wavefront Material FIles (*.mtl)". That will
>> let you load all of the materials and textures. They should all show up in
>> the Material list.
>>
>>
>>
>> 2) The OSPRay Material selection (on Display section of Properties Tab
>> advanced) will have all of the individual materials listed in it + a few
>> others including "Value Indexed" which is all the way at the bottom. Choose
>> that it means "use the categorical color lookup table to decide what
>> material to use for each block and or polygon"
>>
>>
>>
>> 3) Now change the scalar array to color by to "Material Id", a cell
>> aligned array which has the material index to use for each cell.
>>
>>
>>
>> 4) Make up a categorical lookup table.
>>
>>    open spreadsheet view, switch to Field Data, look at the Material
>> Names.
>>
>>    open the color map editor for the "Material Id", click on Interpret
>> Values As Categories and the color will change from bluewhitered to
>> extremely YELLOW.
>>
>>    add annotations, value 0 should be the name of the first entry in the
>> Material Names array.
>>
>>
>>
>> Notes:
>>
>> * I have the trivial script somewhere that I used for the SC17 demo that
>> makes up the lookup table for you. I'll try and dig that up.
>>
>> * in general it isn't a 1:1 match between mtl and ospray, in particular
>> multitextures are not yet implemented
>>
>> * along those lines, the mtl parser I whipped up
>> $PVSRC/VTK/Rendering/OSPRay/vtkMaterialLibrary::InternalParseMTL
>> recognizes a "type" extension outside of mtl that lets you bring in
>> ospray's nice materials instead of the default OBJMaterial. Glass and Metal
>> are particularly nice.
>>
>>
>>
>> At some point I'll get around to making this all automatic. Patches are
>> welcome in the meantime.
>>
>>
>>
>> good luck
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> David E DeMarle
>> Kitware, Inc.
>> Principal Engineer
>> 21 Corporate Drive
>> <https://maps.google.com/?q=21+Corporate+Drive+%0D%0AClifton+Park,+NY+12065&entry=gmail&source=g>
>> Clifton Park, NY 12065-8662
>> Phone: 518-881-4909
>>
>>
>>
>> On Fri, May 18, 2018 at 10:25 AM, Jonathan Borduas <
>> jonathan.borduas at caboma.com> wrote:
>>
>> Hi,
>>
>> I tried rendering an .obj file running OSPRay that was exported from PCon
>> Planner Version 7.7 Patch 1. The original file is a .dwg
>>
>>
>>
>> I used the PathThracer mode. However, attached to the .obj there is an
>> .mtl file containing 50+ materials and 50+ texture (.png) files.
>>
>> I didn’t find an automated way to map all polydata of the .obj with their
>> respective material and texture file and rendering them using OSPRay.
>>
>> It seems that I have to assign the material and texture to each polydata
>> one-by-one.
>>
>>
>>
>> Is there a feature that will automatically map the respective textures
>> and materials ?
>>
>> Here is the link to download the original .dwg file.
>> https://www.easterngraphics.com/pcon/en/wp-content/uploads/
>> 2015/03/sample_apartment.dwg
>>
>> You will need to export it to .obj using PCon Planner Version 7.7 Patch 1
>> with the File/Export/Geometry menu.
>> I couldn’t share the .obj  file since the size is 60mb+
>>
>>
>>
>> Thank you
>>
>>
>>
>> Jonathan Borduas
>>
>>
>>
>>
>> _______________________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> Please keep messages on-topic and check the ParaView Wiki at:
>> http://paraview.org/Wiki/ParaView
>>
>> Search the list archives at: http://markmail.org/search/?q=ParaView
>>
>> Follow this link to subscribe/unsubscribe:
>> https://public.kitware.com/mailman/listinfo/paraview
>>
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://public.kitware.com/pipermail/paraview/attachments/20180522/185324b3/attachment.html>


More information about the ParaView mailing list