Unity incorporates a new asset type known as Procedural Materials. These are essentially the same as standard Materials except that the textures they use can be generated at runtime rather than being predefined and stored.
The script code that generates a texture procedurally will typically take up much less space in storage and transmission than a bitmap image and so Procedural Materials can help reduce download times. Additionally, the generation script can be equipped with parameters that can be changed in order to vary the visual properties of the material at runtime. These properties can be anything from color variations to the size of bricks in a wall. Not only does this mean that many variations can be generated from a single Procedural Material but also that the material can be animated on a frame-by-frame basis. Many interesting visual effects are possible - imagine a character gradually turning to stone or acid damaging a surface as it touches.
El sistema Procedural Material de Unity es basado alrededor de un producto estándar de industria llamado Substance, desarrollado por (Allegorithmic)(http://www.allegorithmic.com/) by Allegorithmic.
As of Unity 5.2, Procedural Materials are currently fully supported for Standalone (Windows, Mac, Linux; both standalone and webplayer), Android and iOS, PlayStation 4 and Xbox One build targets. Procedural material generation is CPU-based, and works on all hardware configurations on these platforms.
For all other platforms (consoles, WSA/WP8, WebGL, Tizen), Unity will pre-render (“bake”) them into ordinary Materials during the build. Although this negates the runtime benefits of procedural generation, it is still useful to be able to create variations on a basic material in the editor.
A Procedural Material is supplied as a Substance Archive file (SBSAR) which you can import like any other asset (drag and drop directly onto the Assets folder or use Assets->Import New Asset…). A Substance Archive asset contains one or more Procedural Materials and contains all the scripts and images required by these. Uncompiled SBS files are not supported.
Aunque ellos sean implementados diferentemente, Unity maneja un Procedural Material justo como cualquier otro Material. Para asignar un Procedural Material a un mesh, por ejemplo, usted simplemente arrastra y suelta a un mesh exactamente como usted haría con cualquier otro Material. To assign a Procedural Material to a mesh, for example, you just drag and drop it onto the mesh exactly as you would with any other Material.
Each Procedural Material is a custom script which generates a particular type of material. These scripts are similar to Unity scripts in that they can have variables exposed for assignment in the inspector. For example, a “Brick Wall” Procedural Material could expose properties that let you set the number of courses of bricks, the colors of the bricks and the color of the mortar. This potentially offers infinite material variations from a single asset. These properties can also be set from a script at runtime in much the same way as the public variables of a MonoBehaviour script.
Procedural Materials pueden también incorporar texturas de animación. Por ejemplo, usted puede animar las manos del reloj o las cucarachas corriendo a través. hands of the clock or cockroaches running across a floor.
Procedural Materials can work with any combination of procedurally generated textures and stored bitmaps. Additionally, included bitmap images can be filtered and modified before use. Unlike a standard Material, a Procedural Material can use vector images in the form of SVG files which allows for resolution-independent textures.
The design tools available for creating Procedural Materials from scratch use visual, node-based editing similar to the kind found in artistic tools. This makes creation accessible to artists who may have little or no coding experience. As an example, here is a screenshot from Allegorithmic’s Substance Designer which shows a “brick wall” Procedural Material under construction:
Since Unity’s Procedural Materials are based on the industry standard Substance product, Procedural Material assets are readily available from internet sources, including Unity’s own Asset Store. Allegorithmic’s Substance Designer can be used to create Procedural Materials, but there are other applications (3D modelling apps, for example) that incorporate the Substance technology and work just as well with Unity.
Procedural Materials inherently tend to use less storage than bitmap images. However, the trade-off is that they are based around scripts and running those scripts to generate materials requires some CPU and GPU resources. The more complex your Procedural Materials are, the greater their runtime overhead.
Procedural Materials support a form of caching whereby the material is only updated if its parameters have changed since it was last generated. Further to this, some materials may have many properties that could theoretically be changed and yet only a few will ever need to change at runtime. In such cases, you can inform Unity about the variables that will not change to help it cache as much data as possible from the previous generation of the material. This will often improve performance significantly.
Procedural Materials can refer to hidden, system-wide, variables, such as elapsed time or number of Procedural Material instances (this data can be useful for animations). Changes in the values of these variables can still force a Procedural Material to update even if none of the explicitly defined parameters change.
Procedural Materials can also be used purely as a convenience in the editor (ie, you can generate a standard Material by setting the parameters of a Procedural Material and then “baking” it). This will remove the runtime overhead of material generation but naturally, the baked materials can’t be changed or animated during gameplay.
Since the complexity of a Procedural Material can affect runtime performance, Allegorithmic incorporates profiling features in its Substance Player tool. This tool is available to download for free from Allegorithmic’s website.
El Reproductor Substance utiliza el mismo motor de renderizado optimizado como el que está integrado en Unity, entonces sus medidas de renderización es más representativa en Unity que en el Diseñador de Substance. El Reproductor Substance utiliza el mismo motor de renderizado optimizado como el que está integrado en Unity, entonces sus medidas de renderización es más representativa en Unity que en el Diseñador de Substance.