Reference is an important part of every project that aims to look realistic. I found a picture of some lace with a lot of intricate detail that I really liked and thought it would be a bit of challenge. After analyzing the reference, I figured I would try to break it down into three parts:
I decided to structure the two shells this way to get the right shadows and depth. This would be similar to how the lace would be sewn in real life. The third layer consisted of the big leaves laying over her shoulders. I decided to mesh them together since they lay on top of each other and will be seen from several angles, and therefore needed to be double sided.
I planned to sculpt five different pattern pieces for the lace. I started out by drawing alphas in Photoshop for use in Zbrush. For faster results, I decided to keep the sculpt pretty rough and focused on adding most of the small details in the textures. After sculpting each piece, I decimated them a bit to make it manageable when placing several pieces at the same time. Then, I made an IMM brush that contained all of the pieces so I could place them on the character. I placed them with DragRect and shaped them using the move brush until I was happy with how the pattern looked.
In this section, I will break down each component of my lace mesh setup. The first shell (Shell 1) was my underlying lace that the other lace pieces are attached to I used a modified version of a tiling material that I bought on the Substance Source store. The second layer (Shell 2) is a low poly shell with baked normals from the highpoly. The Meshed Leaves are double sided and baked from the highpoly version of the leaf
The lace material is set to Microfiber in the Diffusion module. It has Fuzz settings that wrap the lighting around the edges of the mesh, which helps push the realism of cloth materials. To make the lace shell look fuller and have thickness on the sides, I used a simple Displacement map. The Scale slider in the Displacement settings determines the intensity of the Displacement map, and since lace is a thin material, my slider was set to a low value. To remove Displacement artifacts, you can tessellate the mesh to a higher resolution. This might slow down your scene significantly. The gif above shows tessellation being increased in wireframe view.
Good lighting is crucial for achieving the right mood in a scene. For this project, I wanted a soft and eerie mood with a dramatic flair. I started out by adding the Ennis House Sky to create my basic ambient light and reflections. The entire lighting setup was composed with 5 light sources:
The Contact Refinement check box turns on ray tracing for the light, and helps to fill in gaps in the shadows where meshes overlap. This setting made the shadows look a lot more realistic on the skin underneath the lace.
The Post Process settings in the Camera properties can be used to completely alter the mood of the scene. The image to the right shows my final post processing settings and the image on the right shows the default settings.
The most important settings for me were the Depth of Field and Tone Mapping settings. I reduced the Saturation and dropped the Exposure down to 0.5 to get a better mid range. Then, I used the Curve Editor to punch up the highlights and add some darker shadows. I used the remaining RGB curves to add color to specific areas.
I decided to mesh them together since they lay on top of each other and will be seen from several angles, and therefore needed to be double sided. The third layer consisted of the big leaves laying over her shoulders. This would be similar to how the lace would be sewn in real life. I decided to structure the two shells this way to get the right shadows and depth.
Filament is a physically based rendering (PBR) engine for Android. Filament offers a customizablematerial system that you can use to create both simple and complex materials. This documentdescribes all the features available to materials and how to create your own material.
Also called shading model or lighting model, the material model defines the intrinsic properties of a surface. These properties have a direct influence on the way lighting is computed and therefore on the appearance of a surface.
At runtime, materials are loaded from material packages compiled from material definitions using the matc tool. A material package contains all the information required to describe a material, and shaders generated for the target runtime platforms. This is necessary because different platforms (Android, macOS, Linux, etc.) use different graphics APIs or different variants of similar graphics APIs (OpenGL vs OpenGL ES for instance).
A material instance is a reference to a material and a set of values for the different values of that material. Material instances are not covered in this document as they are created and manipulated directly from code using Filament's APIs.
The lit model is Filament's standard material model. This physically-based shading model wasdesigned after to offer good interoperability with other common tools and engines such as Unity 5,Unreal Engine 4, Substance Designer or Marmoset Toolbag.
Several material model properties expect RGB colors. Filament materials use RGB colors in linear space and you must take proper care of supplying colors in that space. See the Linear colors section for more information.
The light attenuation through the material is defined as \(e^-absorption \cdot distance\), and the distance depends on the thickness parameter. If thickness is not provided, then the absorption parameter is used directly and the light attenuation through the material becomes \(1 - absorption\). To obtain a certain color at a desired distance, the above equation can be inverted such as \(absorption = -\fracln(color)distance\).
The index of refraction (IOR) and the reflectance represent the same physical attribute, therefore they don't need to be both specified. Typically, only the reflectance is specified, and the IOR is deduced automatically. When only the IOR is specified, the reflectance is then deduced automatically. It is possible to specify both, in which case their values are kept as-is, which can lead to physically impossible materials, however, this might be desirable for artistic reasons.
thickness represents the thickness of solid objects in the direction of the normal, for satisfactory results, this should be provided per fragment (e.g.: as a texture) or at least per vertex. microThickness represent the thickness of the thin layer of an object, and can generally be provided as a constant value. For example, a 1mm thin hollow sphere of radius 1m, would have a thickness of 1 and a microThickness of 0.001. Currently thickness is not used when refractionType is set to thin.
The baseColor property defines the perceived color of an object (sometimes called albedo). Theeffect of baseColor depends on the nature of the surface, controlled by the metallic propertyexplained in the Metallic section.
Defines the diffuse color of the surface. Real-world values are typically found in the range \([10..240]\) if the value is encoded between 0 and 255, or in the range \([0.04..0.94]\) between 0 and 1. Several examples of base colors for non-metallic surfaces can be found in table 3.
Defines the specular color of the surface. Real-world values are typically found in the range \([170..255]\) if the value is encoded between 0 and 255, or in the range \([0.66..1.0]\) between 0 and 1. Several examples of base colors for metallic surfaces can be found in table 4.
The metallic property defines whether the surface is a metallic (conductor) or a non-metallic(dielectric) surface. This property should be used as a binary value, set to either 0 or 1.Intermediate values are only truly useful to create transitions between different types of surfaceswhen using textures.
This property can dramatically change the appearance of a surface. Non-metallic surfaces havechromatic diffuse reflection and achromatic specular reflection (reflected light does not changecolor). Metallic surfaces do not have any diffuse reflection and chromatic specular reflection(reflected light takes on the color of the surfaced as defined by baseColor).
When refraction through an object is enabled (using a refractonType of thin or solid), theroughness property will also affect the refractions, as shown in figure 4 (click on the image to see a larger version).
The reflectance property only affects non-metallic surfaces. This property can be used to controlthe specular intensity and index of refraction of materials. This value is definedbetween 0 and 1 and represents a remapping of a percentage of reflectance. For instance, thedefault value of 0.5 corresponds to a reflectance of 4%. Values below 0.35 (2% reflectance) shouldbe avoided as no real-world materials have such low reflectance.
Note that the reflectance property also defines the index of refraction of the surface.When this property is defined it is not necessary to define the ior property. Settingeither of these properties will automatically compute the other property. It is possibleto specify both, in which case their values are kept as-is, which can lead to physicallyimpossible materials, however, this might be desirable for artistic reasons.
The sheen color controls the color appearance and strength of an optional sheen layer on top of thebase layer described by the properties above. The sheen layer always sits below the clear coat layerif such a layer is present.
The effect of sheenRoughness on a rough metal is shown in figure 8(click on the image to see a larger version). In this picture, the base layer is a dark blue, withmetallic set to 0.0 and roughness set to 1.0.
Multi-layer materials are fairly common, particularly materials with a thin translucentlayer over a base layer. Real world examples of such materials include car paints, soda cans,lacquered wood and acrylic.
c80f0f1006