Texturing and Shading

SHADING is a term used for applying renderable colours, surface bumps, transparency, reflection, shine, luminescence, glow or similar attributes. Shading defines the look of your model when it is rendered. Shaders are based on nodes that hold attributes that define the shader.

TEXTURES give objects relevance to their surroundings, believability, quality. Textures are applied to shader attributes, called Texture Mapping e.g. mapping a texture to the colour node of a shader. To apply a texture to an object, you map the texture to an attribute on the object’s material. The attribute to which the texture is connected determines how the texture is used and how it affects the final results.

SHADING NETWORKS or shading groups are interconnected shading nodes comprising of a set of material nodes responsible for the visual representation of a material, as well as a description of what will be baked during processing. The Shading Groups are the nodes that allow the connection between the surface and the material that has been created showing each of the attributes.

MIPMAPPING to reduce the amount of computing for the final pixel colour. A single pixel may correspond to thousands of pixels in the image. The renderer chooses the appropriate level of file texture image to use based on how much screen coverage there is, how obliquely the object is being viewed and the distance.

  • fliter
  • filter offset
  • pre filter
  • pre filter radius

LAYERED SHADER has one level of transparence to blend textures together

LAYERED TEXTURE composites textures using several blending operations

Multiply – white is 1, 1, 1 whatever colour is multiplied by 1 gives the original colour. Black 0, 0, 0 becomes black because anything multiplied by 0 gives 0.

RAMP TEXTURES blends colours and combines textures and controlling how they blend

COMPUTER GRAPHICS LIGHTING

COMMON SHADER/SURFACE MATERIAL ATTRIBUTES

MAYA SHADING

  • COLOUR RGB or HSV value defines the colour
  • TRANSPARENCY higher the transparency the less opaque. Black being opaque or solid and white totally clear, transparency can have colour where the shader’s colour shifts because only some of its RGB values are transparent
  • AMBIENT COLOUR often used to create flat areas and the more ambient light that is created the more the colour attribute will be affected
  • INCANDESCENCE or self-illuminating such as florescent lights
  • BUMP MAPS creates inexpensive surface textures by adding highlights and shadows without altering the surface. Generally not suitable for very close up textures where displacement maps need to be considered
  • DIFFUSE how much light is reflected in all directions, light disperses across the surface, lower values absorbs more light yielding a darker surface
  • TRANSLUCENCE and TRANSLUCENCE FOCUS transmit light through the surface with 1 all light shines through and 0 none does. The Translucence Focus attribute specifies how much of that light is scattered.
  • GLOW INTENSITY as if it was emitting light into a foggy area
  • MATTES image formats such as TIFF and TARGA have an alpha channel which is a grey scale channel that controls the opacity of an image.
  • MATTE OPACITY where there is an object the matte is white, where there is nothing, the matte is black. Used in compositing programmes.
  • RAYTRACE OPTIONS for reflections and refractions
  • SPECULAR COLOUR colour of highlights on a shiny surface, black no specular, white bright specular
  • REFLECTIVITY how much reflection is visible
  • REFLECTED COLOUR usually using texture maps assigned to this attribute reflecting what is on the image file or texture

TEXTURE NODES Procedural uses the nodes attributes and Bitmap is a saved image file using a file texture node.

  • COLOUR BALANCE adjusts the overall brightness and colour tint
  • EFFECTS Invert the colour space for RGB values, black to white and white to black
  • PLACE2dTEXTURES controls repetition, rotation, size, offset, wrap U and V, Mirror U and V, coverage, translate frame, rotate frame
  • RAMP is a gradient, ramp texture, ramp shader
  • FRACTAL, NOISE and MOUNTAIN create random patterns and often used to create bump maps
  • BULGE, CLOTH, CHECKER, GRID and WATER often attached to the shader’s Bump Mapping attribute including colour or specular irregularities
  • FILE to import image files, can also use a projection texture, if there is an alpha channel it is automatically connected to the transparency, often used for colour, bump and transparency
  • PSD files can specify the layers for different attributes of the shader, colour, transparency, bump

BUMP MAP alters the way light hits the surface normals creating the illusion of surface relief

DISPLACEMENT MAPPING uses a texture to alter the shape of the geometry and connected to a shading group not instead of the material node as it is applied to geometry rather than shading. Adjust the Alpha Gain.

TRANSPARENCY MAPPING

A material’s transparency is the opposite of a file texture’s Alpha channel which is generally based on opacity

alpha opacity (0=black=transparency; 1 = white = opaque)

material transparency (0 = black = opaque; 1 = white = transparent)

UV MAPPING places the texture directly on the surface using surface coordinates.

PROJECTIONS allows a textured image to be projected onto a surface using a 3D placement, projection node controlling the method and placement of projection. Also can be used for objects to reflect an environment, it is possible to parent or constrain the placement node to an object.

BOT Block Ordered Texture

Pre-converted to BOT

makebot -i “in_image” -0 “out_bot_file”;

store in a specified diredtory

makebot -i “in_image” -o “./sourceimages/out_bot_file”;

MATERIAL NODES hold all the relevant rendering information about the object to which they are assigned e.g. colour, opacity.

The way light bounces off an object defines how we see that object and shaders differ in how they deal with the differences in how light bounces off the surfaces.

UV MAPPING

compile_001

Placing the texture directly on the surface.  For Maya to understand how to apply a 2D texture to a 3D polygon a 2D coordinate system, called UV  texture space is used.  Texture Space, a 2D map axis system allows for the assignment of a UV-axis to the polygons.  UVs are 2D representations of a 3D object.  

The UV texture space relates the pixels of a texture map to positions on a 3D surface, the polygon’s vertices within the texture space.  If polygon faces overlap within the UV texture space, they share the same section of an assigned texture.  The pixel at that position on the texture map will be located at that vertex. UVs can be selected in 3D space cannot be manipulated in 3D space, to directly manipulate UVs open the UV Texture Editor.

The are many different methods for making a UV-axis on polygon objects including:  
  • Planar Mapping – to project the UV-axis along the plane to make the texture map, is best for objects that are relatively flat, or at least are completely visible from one camera angle.  Smart Fit if off can indicate the location of the manipulator by entering values directly for Projection Centre, Rotation, Projection Width and Height  Adjusting using Channel Box, Attribute Editor or the Manipulator.  Fit to Best Plane will automatically snap into place the projection of all the faces to create an optimal texture mapping for the face, with respect to border edge of the selected face and the Mapping Direction option is turned off.  Fit to Bounding Box the texture is projected vertically along the specified axis inside the bounding box of the polygon objet and the manipulator will snap.  The mapping direction option can be used to select along which axis the projection is made. 
  • Cylindrical Mapping  creating a texture mapping in the shape of a cylinder around the object.  As needed the manipulator can be used to place the texture over the polygon face or arrange the texture over the object in the Channel Box or Attribute Editor.  There can be problems at the joints or seams. The Projection Horizontal Sweep value set to 180 will encircle half the object, 360 the complete encircle of the object.  The Projection Centre can also be adjusted. 
  • Spherical Mapping the same principles as for Cylindrical Mapping 
  • Automatic Mapping  is convenient for preventing partial UV distortion, the polygon UV values in the texture space are cut out from repeating UV meshes and divided within the 0, 1 coordinates of the texture preventing repeating UV values and potentially distorting images.   The allotment of the textures for each face is relatively small resulting in texture loss. 
  • Camera Based
  • Best Plane Texturing Tool

Each comes with a manipulator used to reedit the UV-axis to adjust the size, repetition and rotation of the texture.  If History is alive, the manipulator can be displayed and modified. 

About Projection Maps

 
 

EDITING UVs

The 0-1 UV space is visible in the Texture Editor and when loading a texture Maya will normalise it to be in the 0-1 space, making it square, regardless of the width and height.  Normalising the UVs will position them in the 0, 1 texture space.  If using one texture map for the character then it is better to place the UV shells in the 0-1 space to lose as little as possible of the texture map.  If there are multiple texture maps such as one for the head, one for the body, one for the arms and another for the legs then different UV shells can be placed into different quadrants.  Texture wrapping does repeat the texture beyond the 0-1 UV space.

NORMALISE UVs  will position them in the 0,1 texture space.  Collectively will normalise all the UVs in the selected face.  Each Face Separately will normalise the UVs in the selected face individually, each selected face will be positioned within the 0, 1 texture space.  Preserve Aspect Ratio will uniformly scale the UV in the direction of U and V. 

UNITIZE UVs  arranges the UVs of the selected face within the boundaries of the 0, 1 texture space.

FLIP and ROTATE UVs  The Flip command lets you easily change the orientation of UV shells within the UV Editor. Flipping a UV shell is useful if you need to correct a texture that is reversed. 

MAP UV BORDER  move the UVs on the border of a UV shell out to the edges of the 0 to 1 texture space range (square), or in a circle inscribed within the 0 to 1 range. 

STRAIGHTEN UV BORDER  to straighten UVs along the same edge loop in order to fix distortions on a UV map. 

  • Curvature will push or pull out the border of selected UV
  • Preserve Length Ratio adjusts the size of the Texture Edge when the UV border is straightened out, 1 preserves the original length, 0 calculates an average length between 0 and 1
  • Blend Original Shape applies a blend according to the given value that fits with the shape of the original border, 0 the border is straightened out, 1 the shape of the original border is preserved and between 0 and 1 is a proportional value of the length. 
  • Fill Gap in Selection, UV Gap Tolerance, when the UV border is severely twisted 

RELAX UVs   causes twisted UVs to straighten out automatically 

  • Edge Weights determines how the UV Relax will be applied to the edge.  Uniform where all edges are set to the same length and relaxed or World Space maintaining the angle of the original wold space.
  • Pin UV Border maintains the UV border and the rest is relaxed 
  • Pin Selected UVs the selected UVs are not relaxed
  • Pin Unselected UVs relaxes only the UVs that have not been selected
  • Max Iteration can enter the value to determine how many times we wish to repeat the Relax

LAYOUT UVs    for surfaces with overlapping meshes and arranges them so they do not overlap in the texture axis. 

  • Separate determines how the surface will be divided for the layout.  Off does not separate overlapping surfaces and only applies it in Scale Options, Folds divides only the surfaces that in the direction opposite the normal direction of the overlapping surfaces, All Intersections divides all surfaces with overlapping UVs
  • Flip Reverse, flips surfaces that are facing the direction opposite the normal
  • Rotate For Best Fit automatically rotates surfaces and rearranges them inside the texture axis for the optimum effect
  • Layout determines the location inside the texture space where the UV mesh fragments will be arranged. None means a layout is not made in the texture space after the surfaces are divided and some surfaces will overlap with other surfaces, Along U arranges the surface along the U-axis, Into Square arranges the surfaces within the 0, 1 texture space
  • Scale establishes the scale method of the UV mesh fragments inside the texture space.  None is no scaling, Uniform scales the surface fixedly within the 0, 1 texture space without changing the width/height ratio, Stretch to Square stretches out the surfaces to fix them in the 0, 1 texture space which may cause the surface to twist
  • Map Size Presets where Maya creates random bounding boxes for each fragment and etermines how close the layout will come to these bounding boxes.  In the fragment layout, UVs can exchange pixels which can lead to problems with using Texture Paint.  To avoid such problems, select the predetermined Free Set in this menu to spread out the pixels between bounding boxes in the layout. Each of the fragments will be arranged with some spacing between them as determined by the specified resolution.  The lower the resolution, the larger the UV spacing between bounding boxes
  • Space to specify the percentage which will determine how far apart the spacing will be
Unfold the UVs into UV shells to define the different parts of the body eg head, arms and legs aiming to have the shells to lay relatively flat without overlapping.  The UV cuts require some planning to obtain the best unfolded result to create the best possible result between the original polygons and their corresponding UV mesh.  The polygon edge cuts are likely to result in texture mismatches along those edges and need to be located in less visible places such as under the arms and at the back of the legs.
 
Unfolding of the UVs to ensure the UVs do not overlap. Helping to minimise the distortion of texture maps on polygon meshes by optimising the position of the UV coordinates so they more closely reflect the original mesh.
 
CUT UVs  select an edge and divide the UV
 
SEW UVs   links edges together that have been cut
 
MOVE and SEW UVs  to be able to  move and link together UVs of smaller surfaces to the UVs of the larger surface
  • Manual Execution 
  • Automatic Execution 

MERGE UVs  to link the edges which are not shared

DELETE UVs  removes only the UV texture coordinate data on the mesh and does not affect the vertices on the mesh.

UV MAPPING 

UV MAPPING TIPS

LESTER BANKS  Maya UV Editing

LESTER BANKS   UV Mapping in Maya, Made Easy

UV TEXTURE EDITOR 

OVERVIEW 

Allows the editing of the UVs of the surfaces to make the optimal UV-axis.  

The Snapshot saves the UV-axis as an image file when making a map source in an image processing program such as Photoshop.  Files such as iff, tga and tiff formats all support 32 bits, therefore include alpha channels and will appear as a separate layer when loaded into Photoshop. 

OTHER

Materials or shaders are small programs that determine the surface qualities of the geometry they are assigned to.

Colour Map

Ambient Colour represents diffuse reflections from other surfaces in the scene and can affect the contrast of the shader.

Transparency Map – need to consider that the renderer recognises the shadow of the transparency, the light shadow has been applied to the transparent regions.  The difference between using a Raytracing Shadow and a Depth Map Shadow.  Consider using a Layer Shader.

Translucence simulated the diffuse penetration of light into a solid surface such as leaves.

Bump Maps, Normal Maps and Displacements Maps are three ways to add surface detail to a model using textures.

Bump and Normal Maps alters the surface normal of an object to give the impression of surface details. They used the colour information that is stored in a 2D texture map.  The lighting that hits the geometries surface normals tells the render to alter the surface normal and it is the light that then creates highlighting, shading or shadowing.  It does not change the surface’s silhouette edge.  Middle-grey values have no effect, higher values cause peaks and lower values cause valleys.

Displacement Maps are essentially textures that deform geometry.

Specular Map, shine

Alpha Channel  –  32-bit TGA file, opacity options.  

Photoshop – when making a selection on a patch of colour consider applying a Gaussian Blur to the Alpha Channel.  Gaussian Blur in Photoshop is a type of low pass filter which cuts out unevenness and smoothens pixel values in a photograph.

Assigning Textures:  save the file in any of the following formats:  (Windows and Linux) Maya IFF (the default) Autodesk PIX, EPS, GIF, JPEG, RLA, SGI, SoftImage, Targa, and Tiff.  (Mac OS X) Maya IFF (the default), Windows Bitmap, JPEG, MacPaint, Photoshop, PNG, QuickDraw, QuickTime Image, Targa, SGI, and Tiff.

When exporting in OBJ format the UV coordinates are maintained when exporting into other software programs. 

Resolution Gate indicates the outer edge of the render.

3D Paint Tool

Paint on a 3D object

3D COAT

3DCoat is the one application that has all the tools you need to take your 3D idea from a block of digital clay all the way to a production ready, fully textured organic or hard surface model. Today 3DCoat is available to learn at 240 Universities, colleges and schools worldwide.

ACCURATE DISPLACEMENT WORKFLOW

This tutorial attempts to cover and clarify the process of generating and applying accurate displacement maps from either ZBrush or Mudbox, to V-Ray for Maya, V-Ray for 3ds Max, V-Ray for Cinema 4D, or Arnold for Maya (MtoA).  Akin Bilgic.

There’s often a lot of confusion and misinformation surrounding displacement maps and how they’re supposed to work. You’ll sometimes see artists load a displacement map onto their low resolution geometry and play with intensity and depth values until it looks somewhat similar to their high resolution geometry and assume that’s it’s as close as they can get. But with a correct workflow you don’t have to fiddle with settings or settle for ‘close enough’ – it’ll just work correctly from the start to match your high resolution geometry as accurately as possible.

We’ll first cover some of the underlying concepts behind how a floating-point displacement map works and how to recognize if you’re getting correct results. Then we’ll cover some of the common pitfalls that artists frequently encounter and how to avoid them. And finally I’ll provide the step-by-step procedures to make displacement mapping work accurately in your software of choice.

COLOUR  and  MATERIALS

Primary, Secondary, Tertiary, Triad, Complementary, Split Complementary, Analogous Colours, Double-Complement Colours, Tetrad Colours, Alternate Complementary Colours.

Trichromatic and Opponent colour Theory

Hue or chroma, proper name for a colour, the wavelength of light.

Saturation depending on its mixture with grey, ranging from grey to pure colour, the vividness or dullness of a hue, perceived intensity. Saturated colours have no white.

Brightness is the apparent intensity of light that ranges from a totally dark black or luminous white, described by its value and a perceptual evaluation that indicates whether an object appears to emit mor or less light.

Value is the deviation of a hue from white or black, how light or dar an object is, the shad of an object, the light reflection off it, lightness or the nonlinear response to luminance.

For pigment mixture colours we use:

Tint, the addition of white to a pure hue, the consequence of adding white to a pure colour is deceased saturation.

Shade, the opposite of init, with the introduction of black to a pure hue, decreasing the objects’s lightness

Tone results from the addition of black and white to a pure colour being hue plus grey.

Colour Mixing can be additive or subtractive. RGB, CMY, CMYK, HSV, HLS, HVC.

Colour symbolism and emotions

Colour Weight or perceived density changing the virtual perception of the objects apparent size.

Colour Consistency, what is white inside may not look the same white outside, our perception under different lighting conditions.

GLSL Tutorial – Texture Coordinates

The line between a flat, unconvincing texture and one that fools the viewer into thinking they’re looking at a real world object can be a fine one. Ultimately, the real secret to success lies both in working with good source materials and taking the time to modify and augment them with all the necessary associated maps that will determine how the textures behave as viewpoint, lighting conditions, reflections and so on all change. “When it comes to creating realistic materials you want to be able to keep your workflow flexible for iterations and also make sure you’re using the best quality references for the surface, whether they’re photographic or surface scans,” explains Chris Nichols. “This will go a long way to quickly setting up a texture workflow for testing quick iterations of a shader and then building on that in a modular fashion.”

CGI Moon Kit

These color and elevation maps are designed for use in 3D rendering software. They are created from data assembled by the Lunar Reconnaissance Orbiter camera and laser altimeter instrument teams.

BELOW THE SURFACE – QUICK TIPS FOR BETTER TEXTURING

Struggling to achieve convincing results when working on textures for organic and hard surface models? Chris Nichols – Lead Texture Painter for Avengers: Infinity War at Digital Domain in Vancouver and the instructor for CGMA’s Texturing For Films/Cinematics class – offers some words of wisdom.

ADF: What’s The Foundry buying? The Tech of ADF

ALLEGORITHMIC

CG Society

Maya – Using the Layered Texture Node with alpha layers Phil Hoppes

Achieving Realistic Skin Details With Manual Sculpting in Zbrush

The pro guide to creating 3D textures:

By Kyle Peeters, Jacek Kalinowski, Janine Smith, Jan Hoppenheit, Käy Friend – Winners of Allegorithmic’s Procedural Material Contest share their tips for creating a variety of amazing textures.

Customizable Eye Texture Template for Zbrush

Disney Modeler Suzan Kim shares her, Customizable Eye Texture Template for Zbrush for stylized character artists to work with! Go download it for free with a big thanks and throw a tip her way if you feel like it:)

Landscape Smart Material

Apply the material instance to any landscapes. First layer will texture the entire landscape automatically. On top of that, you can also paint manually with other layers.  All foliage is distributed procedurally using “Grass Tool” and “Procedural Foliage Spawner”.  Not that Grass Tool does not support collision.

Modeling and texturing a current gen prop by Ognyan Zahariev

OGNYAN ZAHARIEVPRO is a Senior Lighting Artist at Ubisoft from Sofia, Bulgaria. In this post you will see Tutorial – Modeling and texturing a current gen prop by Ognyan Zahariev. A breakdown of modeling and texturing Dumbledore’s desk.

Animating Materials with Gradients

New to Materials in UE4?  You will want to have a look at this often requested skill for animating materials.

SURFACE MIMIC

Sells 3D surface scans for digital artists in the Visual Effects and Video Game industries. Our surface scans are high resolution displacement, normal, and color diffuse .psd images.

6 TIPS TO IMPROVE YOUR UV MAPPING WORKFLOW – paul h paulino

In this article, I’m going to share with you a few UV’s tips and tricks that I’ve learned in the past two years that I hope can help you get ready for the VFX industry. If you have missed my latest articles and tutorials, check out this page! I hope you enjoy the reading.

Polyraven UV tools

The Polyraven UV tools is a MEL script for MAYA 2018 and later, which makes it easier to unwrap hardsurface geometries, and much faster to deal with the distribution and layout of the UV shells. It includes checker materials, and error checking functions, which can relatively quickly find: flipped, overlapping, incorrectly positioned and missing UVs. And many more things. It has been in development since the beginning of 2017, and every tool in it was created and iterated as the need arose for it.

How to Texture a 3D Character with Mari

Hello, my name is Javier Blanco and I’m a Spanish modelling and texturing artist. Here’s a simple breakdown of the creation process I did to create the first piece of my demo reel at Think Tank Training Centre, with Chris Nichols as my mentor.

Maya -Transferring UVs from “repair” object to animated/rigged original

If you use the standard method of selecting the objects and going to Mesh -> Transfer Attributes, then the result is a matching set of uv’s which are tied to the source object, and will be applied after deformation and skinning, meaning they will slide when deformed. There is, however a solution, which is to add them to the Original mesh node which, by default, is hidden. Once this has been achieved, you can safely delete the history on the Original node thereby severing its dependency on the source object, and applying the uv’s before any deformation thereby preventing sliding.

SKIN  ALPHAS

Working in Zbrush, these high quality alphas will be a great tool to help bring your creatures and environment to life and speed up your concept or work.  05 alphas – Human Skin, black and white .psd files, specifically created and collected with creating realistic and interesting skins.

SUBSTANCE SOURCE material library

An online library of over 2,000 varied PBR materials.  Since its launch in 2016, Substance Source has grown to a library of over 2,000 PBR-ready procedural materials in Allegorithmic’s Substance format.  The collection, which includes fabric and organic materials as well as more conventional categories like wood, metal and stone, can be used in any application that supports the .sbsar format.

TEXTURES:  EPISCURA

UV LAYOUT

PAINTING SOFTWARE

How we achieved the iconic look of Blade Runner 2049

One of the most highly anticipated releases of 2017,  neo-noir science fiction thriller Blade Runner 2049 garnered a multitude of plaudits for it’s eerie, atmospheric aesthetic.  Bafta and Oscar-awarding winning VFX studio Framestore were key players in bringing the film’s environments and assets to life. We caught up with Adam Goldstein, Lead Texture Artist and Michael Borhi, Head of Texturing with Framestore Montreal, to find out more about how the team pulled it off.

THE WIKIHUMAN PROJECT

The Wikihuman project is a collaborative by the members of the Digital Human League to advance the study of digital humans. For more information on the Wikihuman project, please visit their blog at wikihuman.org

CROSSHATCH  SHADING

Digital Tutors, Pluralsight – Easily learn Maya Toon and achieve the look of traditional 2D cartoons and comic books with over 3.5 hours of project-driven training. Ideal for beginner to intermediate users. Popular highlights include: Custom Toon Shaders; Shader Network Creation; Toon Outlines; Toon Outline Attributes; Paint Effects; Converting Toon to Polygons; Crosshatching and Stippling; Particle Dynamics; Profile Lines; Border Lines; Creases; Intersection Lines.

Autodesk – One can construct crosshatch shaders in Maya without needing any special plugins. The key trick is to use a shader in a shading network as if it were a texture. One can use the outColor of a shader(not assigned to any object) to control the linewidth or other attributes of a procedural texture that is in turn assigned to an objects shader. The attached scenefiles demonstrate some hatching techniques and can be loaded into Maya8.5 or later versions.

Hatching Shader – Non Photorealistic Rendering

roofslates_test03

Snap shot courtesy of Philip Smith

Allegorithmic develops Substance, the reference suite for 3D texturing.  The Substance suite includes the software tools Substance Painter for 3D painting, Substance Designer for material authoring and Substance B2M for image-to-material generation, as well as the ever-growing physically based material library Substance Source and the artist-to-artist exchange platform Substance Share.  With a fast-growing community, Substance has become a standard in the game industry and is rapidly expanding to the industries of Animation/VFX, Architecture, and Industrial Design.

Allegorithmic has been reimagining the process of texture creation since 2003. Today, over 85% of AAA game studios use Substance in their production pipelines, making Substance the industry standard for PBR material authoring. Substance is quickly spreading to the fields of VFX and animation, design and architecture, allowing a growing number of artists and designers to harness the power of rapid, efficient texturing and material authoring.

Algorithmic’s YouTube channel  https://www.youtube.com/user/Allegorithmic

m50 assult rifle step by step in substance painter

Official Extended E3 2015 Gameplay Demo – Uncharted 4: A Thief’s End

Maya 2015 – Multi Tile UV Workflow

Interview with Fashion Historian Ivan Sayers

Invoking Venus – Animal Magnetism: attraction through fashion – Ivan Sayers

Advertisement

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: