0
$\begingroup$

I modelled a mid-sized indoor environment (weird house) to be used in the game (specifically in Unity). How do I approach applying textured-materials to it's parts?

Here is how it looks:

The very first thing I need to do is to apply material to the floor, ceiling and walls. This question is solely about this task. I know how to assign material to the selected faces but it is not clear how to apply texture properly.

What I want:

  • Material (let's say for the floor) has the same scale across the whole house
  • This scale can be easily tweaked on a per-material basis by changing somewhere one single scale value
  • Seams/stitches at this stage of my experiments with modelling/texturing/indoor-environments are acceptable but obviously undesirable and should be minimised
  • House model might be updated/extended. This shouldn't require redoing all the work from scratch

I think I want pretty common basic things but I wasn't able to find a single tutorial/description on the best way to achieve it.

My thoughts on possible approaches:

  1. Unwrap the whole house and do material painting (like in my previous question: Material painting in Blender in 2019 (like Unity terrain))

Pros:

  • Allows for adding unique details to different house walls, floor, ceiling areas

Cons:

  • Unnecessarily big resulting texture
  • Big messy UV, generated with smart-project or a lot of manual labour
  • The necessity to regenerate UVs each time house updates and (seems like) the necessity to redraw the materials on the whole house (unless there is a feature in blender to convert texture for an old uv-map to the texture for the new uv-map based on the real-world 3d-coordinates)

    1. Store material textures in separate files (as they were downloaded). Assign uv-coordinates in a way that keeps texture scale in the 3d-world constant and attaching faces share the same uv-s (to prevent stitching)

Pros:

  • No overhead in storing extra textures (as it should be)
  • Minimal stitching

Cons:

  • Unclear, how to automatically assign uv-s this way? Is there such a function in Blender to assign uv-s based on physical size while allowing uv-s outside of [0, 1] range to enable smooth transitions between one texture piece to the next one (where it overflows 1) without stitching?

It seems like the way to get the best results for the problem, but do we have the necessary functionality?

  1. Creating shader which assigns uv-coordinates based on world-coordinates (and normal). This is possible in Unity as well so this is a viable option.

Pros:

  • No overhead in storing extra textures (as it should be)
  • No dealing with UV-s
  • House can be updated or extended without any extra effort

Cons:

  • More stitching compared to the workflow #2. Specifically (as I think of implementation) stitching will appear between faces where the normal changes. This means the walls in the big round rooms (first screenshot) will be in regular stitches)

    1. Separate house into several different objects and do workflow #1 - unwrap UVs, draw materials

Pros:

  • Allows for adding unique details to different house walls, floor, ceiling areas
  • Compared to #1, updating/extending house will require redoing material-painting only for the changed parts

Cons:

  • Once again: duplicating many times mostly the same texture
  • Necessity to spend time doing material painting
  • And necessity to partially redo it for every changed part

Any comments, suggestions are welcomed. It would be especially great to get to know how this is done in professional modelling, animation or game-dev studios.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.