Home Technical Talk

Matching render result, how close is close enough? (Painter vs Maya vs Unity)

polycounter lvl 6
Offline / Send Message
bitinn polycounter lvl 6
Happy Xmas everyone,

For this holiday I am trying to learn something that I haven't been able to do in the past 6 months: get Maya viewport and Unity engine to render a PBR model as close to Substance Painter as possible (Such that I can be pretty confident of my SP results, knowing they will look decent in Maya and Unity without spending too much time to double-check).

I have jumped through quite a few hurdle at this point, but since I am not an experienced artist nor a graphic programmer, I don't know if I have reached an acceptable level of similarity yet...

So here are results, are they close enough? How close have you been able to get?

Substance Painter viewport (no post-processing as its AA looks weird)



Maya viewport (with MSAA)



Substance Painter (IRay):



Unity (real-time, only environment lighting from skybox, with FXAA)



I can see the differences are likely coming from IBL implementation details, but how can I get even better results? Please share your screenshots if you have come up with better matches!

Thx and have a nice day!

Replies

  • Eric Chadwick
    Options
    Offline / Send Message
    What's the purpose?

    I'd say you are close enough. Not worth the extra effort, except for learning purposes. 

    Professional game artists rely on the model looking it's best only in the game itself. The tools are only for creating the content, not for viewing it accurately. Never will be 1:1.

    Best productivity gain is from decreasing the time and effort to refresh the in-game view with the latest model/textures. Live update being the best.

    That being said, more power to you in your quest to learn more about each tool. R&D is to be encouraged; reaps benefits not immediately understood.
  • bitinn
    Options
    Offline / Send Message
    bitinn polycounter lvl 6

    Best productivity gain is from decreasing the time and effort to refresh the in-game view with the latest model/textures. Live update being the best.

    On this subject: I haven't been able to find a solution that does live update for my use case yet.

    - Unity has one that link itself with Maya, but assume you use the default Stingray PBS shader in Maya;
    - SP has one that link itself with Unity, but assume you use Standard shader in Unity.

    Unfortunately to get Maya and Unity render looking similar and share the same textures, I need a custom shader with RMA texture support (it's one of the hurdle I found out the hard way earlier this year...).

    So for compatibility I am still doing it the old way: export static textures from SP and export models/materials from Maya, and Unity will refresh assets itself... I look forward to a solution for live preview someday.

    Thx, and happy holiday!
  • poopipe
    Options
    Offline / Send Message
    poopipe grand marshal polycounter
    I disagree to an extent, you can't see it properly outside of the target engine so checking there is absolutely vital but  the more accurate a representation you can get in your content creation packages  the less iteration is required and the faster you get things right. 
    It's a particular problem when working on console platforms as with exception of one or two proprietary engines I've encountered they're a pain in the arse when it comes to making rapid updates.

    So, to the point in hand... 
    The main issues - as you've identified - are with ibl implementation (both diffuse and specular)  - Eg. substance uses importance sampling rather than  mips/LODS for roughness which can make a huge difference in the behavior of specular highlights 

    It's possible to change the shaders in all 3 of your chosen platforms so you simply need to pick a target implementation and implement it in all of them - usually you can do this by copy&pasting things between Shader files without too much fuss. 

    All that said, it won't take long for you to see past the differences if you're not inclined towards making shaders and n plenty of people manage fine.. 


  • Eric Chadwick
    Options
    Offline / Send Message
    Have you checked out Shader FX in Maya? You could write your own RMA shader to mimic the one you use in Unity.

    I did something similar in Shader FX for 3ds Max when we used a custom channel packing setup in Unity.
    http://ericchadwick.com/img/robot_rising.html#utility_shader

    Also did 3ds Max viewport shaders for the Unity shaders in here
    http://polycount.com/discussion/160691/sketchbook-eric-chadwick/p1

    One issue you'll run into is trying to get the same lighting. I didn't have this problem since our games were fullbright or nearly so.
  • bitinn
    Options
    Offline / Send Message
    bitinn polycounter lvl 6
    Have you checked out Shader FX in Maya? You could write your own RMA shader to mimic the one you use in Unity.

    Yes, in fact I wired the basic RMA shader using it (Stingray PBS is based on Maya ShaderFX).

    The downside is once you use a custom shader, all live update integration tools stops working as they assume the default shader.

    I will go through your linked threads tomorrow :)
  • bitinn
    Options
    Offline / Send Message
    bitinn polycounter lvl 6
    poopipe said:

    It's possible to change the shaders in all 3 of your chosen platforms so you simply need to pick a target implementation and implement it in all of them - usually you can do this by copy&pasting things between Shader files without too much fuss. 

    I would love to see some examples of people getting shader right across Unity, Maya and SP.

    I think for a shader wizard (or maybe someone with decent knowledge of BRDF and shader language), it's possible to do what you suggested. But I am worried about just how much time I have to spend to get the final 10% right.
  • poopipe
    Options
    Offline / Send Message
    poopipe grand marshal polycounter
    You will have to construct a ShaderFX Shader from scratch so it takes a degree of shader knowledge but it's actually not that much work to port an hlsl/glsl Shader over to ShaderFX as you can dump raw code into custom code nodes with fairly minor changes (ShaderFX doesn't understand vector types so you have to change them to floats etc) 
    Tbh from your first post it seems like you know enough sciencey words that you'd probably be able to take a decent crack at it - the rocket science is already done so it's really just a case of rearranging other people's sums. 

    I've recently ported the modified substance Shader we use at work over to ShaderFX -   it took a few days to iron out the kinks but really wasn't a huge amount of work and it's a huge improvement over the stingrayPBS based setup we'd been working with previously - it also helped expose an issue with the brdf algorithm we're using in game so I got a double win ;) 
Sign In or Register to comment.