0
\$\begingroup\$

This is something I should know the answer to by now, so I'm asking to clear up the gaps in my knowledge:

As I (re)learn about shaders, specifically in relation to Unity, I see all sorts of ways to create shaders/materials from within Unity to achieve various visual effects. (using Shader Forge / Shader Graph / manually writing ShaderLab or other shader languages).

I'm also aware that you can create shaders/materials from 3D modeling programs such as 3DS Max. My questions are: When would you choose one method over the other, or could you use both in conjunction? What is a normal workflow? Does material creation in Unity offer context-specific features that are not supported by modeling programs?

\$\endgroup\$

1 Answer 1

1
\$\begingroup\$

If your aim is to render the object in Unity, then you'll likely want to author your materials directly in Unity, or a tool with a dedicated Unity export pipeline, to ensure the result you see in your Unity game at runtime matches what you made in your material editor.

If you use the material editor in an external program, it's highly likely that it's being rendered with a different rendering pipeline than the one used within Unity. So you might tune it until it looks perfect in your external tool, only to find it doesn't look the same when you bring it into Unity, making your iteration process longer and more error-prone.

With regard to using ShaderForge / graphs / manually writing shader code, this is largely a matter of preference and personal workflow style. Some developers find it more intuitive to work in graphs, others prefer the explicit control and speed of editing when writing code.

You might find, depending on the material effect you want to create, you might change strategies - say if a particular feature isn't exposed in the graph, you might have to resort to code to get full control. Or if you want to create a version of an effect for which you already have a great example in graph nodes, it may be faster to modify that example rather than re-implement that functionality from scratch in code.

\$\endgroup\$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .