Revit Texture Mapping With Directshape

I am using RIR to add some breps into Revit that are meant to represent panels. The geometry comes in fine but I am having an issue with the orientation of the textures once I apply a material.

It appears that any surface normal facing the world X vector is mapped correctly where as any surface normal facing the world Y direction is rotate 90 degrees clockwise (if looking directly at the surface).

Is this something I can correct with somehow mapping textures via Rhino before I send the geometry to Revit or is this more likely a Revit related issue?

The worst case work around I can for see is adding model lines to the Revit material and using those model lines to rotate the texture manually but I’m really hoping I am overlooking something in the translation process as that would be a manual process for each face of every panel.

Another possible work around may be getting all surfaces with a normal in the World Y direction and apply a separate material to them before I send the geometry to Revit. I would then rotate that material 90 degrees and it should all show up in Revit correctly. Again I am hoping there’s an easier solution.

Thank you for your help!

Please see attached snip for a visual example of what is happening:

Revit isn’t very helpful in this regard.

How are you making your panels?

Thanks Japhy! Oh I know… One of the reasons I prefer to never render in Revit is the lack of even basic UV mapping controls.

They are closed Polysurfaces in Rhino:

Here are the normals with the Dir command:

I’ll think I’ll need to use grasshopper to get all surface normals facing world Y and assign a different material to them so that I can rotate only those faces back to the proper orientation without using model lines to manually rotate every single panel (there’s 1000s of panels).

There isn’t any way to translate Rhino UV mapping to Revit via Rhino.Inside is there @Japhy ?

If you are making those into direct shapes the UV is always going to aligned in that direction. This is better suited for a Family or Curtain Panel.

Can you post a sampling of your Rhino Panel file?

Large or confidential files can be sent to Rhino - Upload to Support

Good to know, so it may just be that I’m not choosing the best node/geometry representation to mediate between Rhino and Revit for this use case? I went ahead and uploaded the rhino file to the support link you provided as it is for an active project.

Thank you!

The intent of this is for rendering only? is the design going to be changing a lot; Panel Sizes, Materials, etc ?

Curtain Walls would be a pain with the offset curtain grids on each row but definitely not ruling them out

In addition to rendering, it is also being used for documentation and panels are represented by different hatches in elevations and sections and such.

Currently I am controlling the panel width, height, depth, randomization, etc. using SkinDesigner in Grasshopper.

But I am taking the skin designer generated breps and baking them to layers in the Rhino file that I then send to Revit via the directshape method.

Is there a way to convert the end result breps into curtain panels and completely ignore the grids? I’m guessing maybe not since Revit grids tend to define and subdivide curtain panels…

Looking at the SkinDesigner (I had installed at one point, but never used it) it uses blocks, we can use those to generate families pretty easily. Can you upload your Panels as Rhino blocks?

In A I am referencing geometry on the Rhino layers I want to send to Revit:

In B I’m running each branch through a cluster where I determine what name, material, and category I want to have for that panel type:

Inside the cluster in snip C I am actually telling the breps to be a direct shape:

And lastly in D I’m assigning all of that to a new (or existing if already created) workset and setting the phase in Revit:

Nice! So all you really need is a Material fix.

Yes! I believe in that same file I shared the blocks still exist under the following layers:


Perfect. What version of Revit are you running?

R 2019 unfortunately haha

A couple issues.

The naming has some bad characters and hopefully can be made clearer. If you need a block renamer script let me know.

There are currently 216 Families, which makes adding an instance parameter material to each not practical at this time. It also doesn’t appear materials are related to the blocks, which is fine but a different material strategy will need to be used.

These are created using a new generic model template with WorkPlane based checked. (open a generic model template, check the box and save as .rfa in the template folder then rename to .rft)

Having some geometry issues that i’m going to look into (hence the bounding box), this will get you started. (13.8 KB)

  • requires legacy elefront plugin

Thanks Japhy! I’m looking forward to digging into this tomorrow. I’m working on a solution to group the blocks by panel type, hoping we can then take the grouped panels and add a type parameter material to those groups?

I believe I took the blocks and added them to layers and then reference the layers to assign materials that way. I’m going to switch this method to group the blocks instead so that I’m not working with un-instanced geometry anymore. Hoping this will make it easier to assign materials to the whole swatch of grouped blocks instead of each individual.

That being said I haven’t dug into it yet so I may be over simplifying the problem there.

Another way is to create a single flexible family that has the material instance parameter on it already, then just feed the LxWxH and material to the parameters.

Here is using one family and changing the parameters of the 1824 panels.

R_Panel_Family.rfa (392 KB) (17.9 KB)

You can then modify materials and additional parameters (Panel ID tag, etc)