• No results found

2.1 The importance of hair

N/A
N/A
Protected

Academic year: 2021

Share "2.1 The importance of hair "

Copied!
50
0
0

Loading.... (view fulltext now)

Full text

(1)
(2)

Abstract

Despite the importance of hair for characters in games, the process for creating realistic looking real-time hair is a highly difficult task that can only be performed by a few artists. As

the industry is growing so does expectations of games graphics and the need for higher fidelity hairstyles. This paper sets out to explain current modeling techniques for hairstyling, and presents an alternate way for styling haircard models using curve deformers. Our Blender

add-on, based on this method is then previewed by industry professionals to evaluate their perception of the method’s effectiveness based on “control”, “time” and “preference”. Our conclusion is that per wisp curve based controls are easily learnt, relatively quick to use and

gives adequate control over each haircard. The method therefore shows promise in streamlining artists’ production pipelines. This test serves as a pilot for further exploration of

curve based tools for production of real-time hair.

Nyckelord:​ Hair Modeling, Realistic hair for real-time applications, Strips, Hair-band, Haircards, Blender, Tools For Digital Artists, 3D production.

(3)

Table of Contents

Introduction 5

Background 6

The importance of hair 6

Creating Digital Hair 6

Attributes of hair 6

The models of hair creation 6

Realistic hair for games 8

Defining an efficient tool for hair productions 9

Difficulties with hair-band models & their production pipeline 10

Our novel pipeline for styling hair-band models 11

Terminology 12

Problem Statement 13

Method 14

Research method 14

Delimitation 16

Artefact 17

Research 17

Related Research 17

Building upon available software 18

Choosing the right software 18

Developing the Tool (HairStruct 19

HairStruct’s Feature 21

Research and Development 24

Creating a Tutorial Segment 27

(4)

Evaluation 28

Result 28

Summary of results 33

Analysis 35

Conclusion 37

Discussion 38

Summary 38

Discussion 38

Acquiring the target demographic 40

Reliability of the test 40

Future Work 43

Future research 43

Future Development of Tool 44

Acknowledgements 45

References 46

Appendix 49

(5)

1 Introduction

As the game industry keeps growing there is a constant demand to improve the tools developers use to make games. Amongst these are artists, who need tools to efficiently produce graphics that keep up with audience expectations. The creation and simulation of realistic looking hair is one element which is time consuming and costly within games production. The complexity and broad attributes of hair makes everything from hairstyling to texture generation a daunting task for any artist. Based on the engine used for the games’

production and the desired artstyle of that game, there are different methods and techniques to create hair. In this paper we identify multiple techniques used for producing game-ready hair in the industry, we further examine the techniques of placing hair-strips using curve operations as well as placing pre-created hair-groups using deformers.

We furthermore propose a system of using curve-based modifiers for placing hair-strip groups. The purpose is to define a non-destructive workflow to more efficiently place hair-strips along a scalp to increase flexibility in the hair-band modelling workflow. The conceptualized approach to hair-strip placement was further tested by creating an Add-on for Blender(1998) with the purpose of supporting the proposed workflow. Additionally a video series explaining the tools functionality was produced. The tool was then presented to artists in the industry, who got to demo it’s features and answered targeted questions as well as gave broader insight as to the possible usefulness of this approach to hairstyling.

The study shows that the process of styling pre-textured per-wisp curve controlled haircards or hair-chunks was considered a promising and streamlined way to place and style hair.

Whilst lesser control down to the vertices and the lack of slider based menu controls were lacking features for some, the method was deemed time efficient and user friendly. In further discussions regarding implementations of the method for complete pipelines, additional techniques regarding texture-baking were pointed out as essential. Addiotionally, there’s a discussion worth having regarding the usability of the method in Blender itself, where further testing in industry-standard softwares could prove to be the next step for future research.

This test serves as a pilot for further exploration of curve based tools for production of real-time hair. The conclusions that can be made from this study, and consequently this paper, is that a per-wisp curve-controlled workflow for styling of realistic looking real-time hair shows promise. There is a suggested value to further research this method, exploring differencent techniques for controlling curves as well as how this method applies to different styles of hair could further help the development of effective hair-tools for artists.

5

(6)

2 Background

2.1 The importance of hair

Research by LaFrance (2001) Shows us that ones’ hairstyle has an impact on how they are perceived at first glance. Her research proposes that different hairstyles can correlate to different characteristics. Lafranze comes to the conclusion that perceived characteristics such as intelligence, wealth, how outgoing someone is, their self confidence, narrow mindedness and carelessness were significantly different depending on the persons hairstyle. Yu (2001) notes that the overall appearance of virtual characters can greatly be affected through their hairstyles. Kim (2002) agrees and suggests that in order to represent a human person in a virtual environment, it is crucial to also be able to represent that person’s hair. Hair can also prove important for characters to fit into the context of their virtual environment. Not being able to represent a person’s hair could diminish the credibility and realism of the virtual setting (ibid.). However, not all characters and character archetypes have, or need to be represented with hair.

2.2 Creating Digital Hair

2.2.1 Attributes of hair

The physical attributes of one’s hair is, amongst other things, dependent on their ethnicity (Ward, Bertails, Kim, Marschner, Cani and Lin 2007). A person’s hair could be smooth, irregular or naturally curly. All these factors affect how the hair looks and moves. In addition, different hairstyles are achieved through how one’s hair is treated and styled. For example, cutting one's hair short, letting it grow out, putting it up in a ponytail or combing it to one side. These factors continue to affect how the hair looks and moves (ibid.).

2.2.2 The models of hair creation

The game industry is one that keeps growing and nets a large amount of revenue (Petrillo, Pimenta, Trindade & Dietrich 2008). Kanode & Haddad (2009) presents how large amounts of companies fail to identify a proper scope of development and consequently fail to meet their deadlines of production. Kanode & Haddad suggests that it would be of interest for the industry to put effort into educating their teams with better project management techniques, and further invest in the research and development of tools and add-ons that improve the teams’ production pipeline and efficiency.

6

(7)

Creation of virtual hair can be broken down in three main models. These models all have different typical use cases, as well as vastly different production pipelines.

Which model one decides to work with often depends on which level of realism that is intended for the production, as well as if the product is intended to be rendered in real-time or offline.

1) Strand-Based Model:

The method of using a model in which every single hair is represented by primitives such as cylinders, lines and curves, is commonly referred to as strand-based modeling (Kim, 2002). With a human average hair count between 100 000 - 150 000 (ibid.), even models with vastly reduced hair-strands using this method, reaches a very high number of polygons. Strand-based hairstyles are effective in creating highly realistic appearances. Due to the hairs individual geometry, strand-based models are great for animation, in which each hair can be simulated and move independently. The realistic result brought forth by hairstyles using such a high fidelity mesh demands a lot of computational power to render. Strand-based models are therefore limited to mostly offline rendered scenarios, such as VFX and movies, which can afford it’s costly render times (Jung and Lee, 2018). Styling of strand-hair models usually consists of placing guide curves that direct procedural generation of hairs.

The appearance of the hair can furthermore be controlled by a multitude of parameters. For uniform looking hairstyles, strand-based simulation can be fast and effective to produce satisfying results. However, user control over more intricate hairstyles as well as individual strands of hair can prove to be very technical.

2) Hair-Band Model:

Hair-band models practice grouping multiple strands of hair into strips, which are represented as 2D planes (Koh & Huang, 2000). In conjunction with textures of different volumes of hair and the use of alpha maps, the modeled strips achieve the impression of separate wisps of hair. Hair-band models can furthermore be defined by shaders that control normal and specular data to simulate the look of individual, light reactive, strands of hair.

For intuitive user control, modeling of these hair-strips can be achieved by parametric surfaces defined by NURBS. The method of using NURBS to define the flow of hair means using a vastly reduced number of geometric objects for the hairstyle, which in turn leads to accelerated simulation and rendering times (Koh & Huang 2000; Ward et al. 2007). Furthermore, NURBS controlled modeling makes it easy for artists to make adjustments to the hairstyle by changing the flow of individual hair-wisps. Placing and grooming each hair-strips’ curve requires tedious manual labour, but is the most effective and optimized way of styling hair (Lithvall 2018).

7

(8)

3) Freeform Sculpted Hair:

Freeform sculpted hair is the practice of modeling or sculpting hair as volumetric meshes. Surface detail can be enhanced either by additional geometry, texture maps, or a combination of both. Freeform sculpted hairs are more commonly associated with stylized character creation due to the much thicker, and simplified models of hairs achievable using this method. Examples of this can be seen in games like Fortnite (2017) and League of Legends (2009). Freeform sculpted hair models can however be used as references for strand-hair generation (Yuksel, Schaefer & Keyser. 2009) or as a foundation for styling hair using hair-band models.

2.2.3 Realistic hair for games

When developing for games the usually vast amount of objects being rendered at once has to be considered. Optimization of each asset is therefore crucial to make the game run smoothly. Rendering thousands of individual hair-strands has for this reason, up until recently, been too costly to implement in real-time applications (Jung and Lee, 2018). Instead of simulating individual hairs a hair-band model only requires the relatively simple geometry of its hair-strips to be calculated during render (Valdes &

Thaillandier 2019). Hair-band models are therefore a preferred solution for real-time simulations such as games due to them being much less tasking than their strand-based alternative (ibid.).

A major component to realistic looking hair using hair-band models is the geometry’s applied textures and shader. Without them, the visualisation of individual hairs would be absent. Commonly strand based hair is used to render out high-fidelity textures with associated maps to give the impression of volumetric and believable hair on the hair-strip geometry. The textures in hair-band models are inherently responsible for representing the hair’s attributes.

The Hair-band modeling process does however entail more steps that usually demand tasking manual labour from the artist (ibid.). The added cost of time to produce hair-band models cause some companies to opt out of using this approach to simulating hair. Instead, some companies invest in developing tools to be able to solely rely on strand-based models for games. Electronic Arts, with their own Frostbite engine (2008), as well as some third party developers working closely with Nvidia, using HairWorks (2015), has managed to produce strand-based rendering pipelines for games running in real-time.

8

(9)

2.2.4 Defining an efficient tool for hair productions

Ward et al. (2007) talks about current problems with the different methods of virtual hairstyling. They explain that the artist often has to choose between either having precise control of the hair but slow momentum, or to sacrifice user control in favor for faster results. According to Ward et al. a well designed hair-production pipeline for artists should allow for the creation of intricate hairstyles with a lot of user control, whilst remaining time efficient.

Another factor when dealing with any user-centric tools, is the users perception towards what they're interacting with. Norman (2013) writes about the importance of human emotion in design. He talks about the three different levels that people process information, the viceral, the behavioral and the reflective level. The reflective level is based on the visceral and behaviour level and happens afterwards. Norman explains that the behaviour level is experienced for example when a person is using a product.

When expectations meet the results, the person experiences more sense of control and receives positive valence. The more positive valence a person experiences the more likely they are going to positively process the information in the reflective level and the more likely they are to continue to use the product and recommend it to other people. “Designers need to make things that satisfy people’s needs, in terms of function, in terms of being understandable and usable, and in terms of their ability to deliver emotional satisfaction, pride, and delight.” (Norman, 2013).

9

(10)

2.3 Difficulties with hair-band models & their production pipeline

The hair-band model offers a lot of user control regarding the flow of hair-strips, but comes with a limitation in terms of defining hair-strands’ attribute and appearance, which are controlled separately in the texturing process (see chapter 2.2.3: Realistic hair for games).

Another problem with hair-band models is the flat appearance that may appear from the strips of geometry used to simulate the wisps of hair. Liang and Huang (2003) presents a method of counteracting this phenomenon by using U-Shaped hair-strips instead of flat ones. Due to the bent shape of the hair-strips, the geometry’s surface retains a front facing view towards the camera even when shown from an angle. Lithvall (2018) proposes another solution to prevent clearly visible flat looking hair-geometry. Lithvall suggests creating “hair chunks” by stacking multiple hair-strips on top of each other with an offset in angle. The hair-chunks are later used as wisps in the placement process, just like individual hair-strips otherwise would be. Using this method each wisp of hair remains visible from different viewing-angles of the character, and individual hair-strips become less clearly identifiable. Lithvall also proposes a technique of twisting the chunks of hair before placing them, ultimately affecting the hair-strips’ face normals.

When using parametric surface modeling with NURBS to generate hair-strips, the hair-strips’ textures are commonly applied after the strips have been put in place, when the NURBS-surface have been converted to a polygon mesh. This inherently limits the preview of each hair-strip to after it has been styled. In Lithvalls’ (2018) method for styling hair, the hair-strip’s geometry being placed are not generated by the placement and conversion of NURBS, but the placement of already UV-mapped and textured hair-strips created prior to styling the hair. This way control of styling the hair-strips is retained by the artist simultaneously as previewing the hair models’ final textures.

Lithvall places his hair-chunks with the help of bend modifiers in Maya (1998).

10

(11)

2.3.1 Our novel pipeline for styling hair-band models

We propose an approach to styling hair using prepared and already textured sets of hair-strips, similar to that of Lithvalls method (2018), in a manner which would retain per-chunk curve-based controls of the hair.

For the production of realistic looking hair-models using this method, hair-textures are created, preferably prior to styling, using state of the art strand-based models (see chapter 2.2.2: 1) Strand-based model). The generated textures contain different clumps of hair that can be used to assemble hair chunks of varying thickness and style. The texture should contain clumps that can be used for different layers in the hair-model, such as ones used to cover large areas of the scalp, as well as smaller wisps that can be used to create individual or small groups of hair, representing flyaway hair. Once the textures are created, 3D planes can be modeled and UV-mapped on top of the textures. When all hair-strip have corresponding UV-mapped meshes, additional hair-chunks can be assembled (see chapter 2.3:

Difficulties with hair-band models & their production pipelines). The placement of hair is thereafter performed with single per-strip or per-chunk curve modifiers that deform the arc, twist and length of each wisp.

11

(12)

2.4 Terminology

Polygon mesh - 3-dimensional structures, visualised as multiple 2-dimensional planes, defined by 3d coordinates (vertices). Polygon meshes are the most common structures for geometric modeling.

Normals - Normals refer to the pointing direction of a defined area. This information is used to guide the angle of light reflectivity of models in rendering.

Vertices’ normals are defined as “vertex normals’” and polygons’ normals as “face normals’”. There is also the possibility to create texture maps with normal data, referred to as normal maps.

Texture maps - images containing different types of descriptive data that is used to visualize 3D objects. Common map types are color (contains color), normal (contains surface direction), height (contains height relative to mesh), roughness and metallic (used to simulate material properties).

Curve tools - Segments represented as curves in 3-dimensional space.

Common types of curves are bezier curves, nurbs and splines.

Rendering - the process of visualising the final look of an image.

Rendering methods can be divided into “offline-” and “real-time-” rendering, referring to whether the image is rendered live or prior to viewing it. Games are most commonly rendered in real-time due to the image being affected by player input.

Shader - Shaders describe how different materials will behave in a scene.

UV - UV:s are coordinate systems describing where the flat texture maps will correspond to the polygon mesh. The process of mapping out a flattened view of a polygon mesh is described as UV mapping.

12

(13)

3 Problem Statement

The development and rendering of realistic looking hair continues to be a big difficulty in the process of developing virtual characters (Ward et al. 2007; Jung and Lee, 2018). Jung and Lee (2018) notes that believable hair has to conform to a variety of attributes that shape its appearance.

Within a production pipeline, it is an artist's job to produce the hairstyle of all characters.

“One of the most difcult challenges to virtual hairstyling remains to be creating intricate styles with a high level of user control in a short amount of time” (Ward et al. 2007).

Procedural methods for optimizing the production of game ready hair is most relevant for the improvement of artists’ pipelines. However, when it comes to placement of hair-strips in hair-band based models, it is difficult to achieve as precise results when styling using procedural methods, as that of the manual placement of strips done by artists (Ward et al.

2007). Manual placement of hair-strips is not without its own limitations. Whilst it does provide more control over the flow of hair, common adaptations of this approach, using parametric surface modeling to create hair-strips, does entail working without applied textures. Novel methods for producing hair whilst previewing planes with textures are of interest. Lithvalls pipeline for creating game ready hair is a widely recognized solution to this problem. Lithvalls method for placing haircards using maya deformers, differ from the more commonly used curve based techniques.

This paper sets out to answer whether pre textured hair-strip modeling workflows are beneficial for artists working with real-time hair. We furthermore want to investigate if the pre-textured hair-band modeling pipeline can be improved using single per-wisp curve based controls that direct all attributes of the hair.

13

(14)

3.1 Method

In order to find out if pre-textured hair-band modeling, as well as single per-wisp curve based controls, for hairstyling, is preferred or could be beneficial within the hair-band modeling pipeline, a method based on the aforementioned workflow was produced. In addition, An add-on for the software Blender(1998) was created to support the workflow. In order to better test the workflow and tool, a video tutorial series was produced alongside the add-on. The video series explains how to work with this workflow and how to use the add-on created.

This method has then been handed to graphical artists who have experience working with virtual hairstyling and the creation of realistic hairstyles for games. They have been asked to use this proposed method and to provide their thoughts on their brief preview. Furthermore interviews with each person who participated in demoing our technique has been conducted. They were asked to share their thoughts about the tools, but more importantly what they thought about the usability of our method, the actual practice of using curves to control the placements of pre-modeled and textured hair-strips. Questions were geared to answering the benefits and downsides to this approach, and furthermore how this method compares to the workflow and tools the artists already are familiar with. An analysis and early review of the workflow could then be presented based on the response gathered from the interviews.

3.1.1 Research method

Extracting results from the testing of our novel approach to this creative endeavour can prove to be very nuanced. The goal has been to answer the question as to if this approach can help optimize the pipeline of creating hair. Understanding whether the feedback given by artists in the control group is influenced by UI design, experience with the chosen software or is purely based around the method itself, has however proven to be challenging.

Gathering qualitative data conducting per person interviews has been the method for analysing the outcome of this study. A qualitative structure allows us to focus on the perception and interaction of every user, and allows us to delve, adapt and focus on any findings that might seem relevant to each tester's interaction. With the exploratory nature of this study, qualitative in person testing provides adaptability, making it possible to adapt for example questions based on unique findings or insights from testers. Something an uniformal online query, or other quantitative testing formats, would not be able to provide. An online survey, on the other hand, would’ve more likely provided a larger amount of testers, and in turn, query answers. However, it would be difficult to design a survey that would’ve taken into consideration artist’s possible notions about our method, since not knowing exactly what experience the

14

(15)

user would’ve had with our artifact would make it difficult to know ahead of time what questions to ask.

With an unstructured interview the possibility for follow-up questions is provided, and the likeliness of extracting nuanced information to use for analysis more likely. It therefore seems preferable to conduct the testing in a qualitative manner, using per-person interviews in which the possibility to follow up with open-ended questions is available. This way, the questions and content of the interview could be shaped by the thoughts and feedback each unique tester would bring to the conversation.

The analysis of tester answers has been structured to review the method based on three categories.

1) Speed:

How fast the user interprets the method to be. Qualifying answers would be things like judgement of the overall speed of the workflow or the relative time the tester perceives the tool would need to achieve a certain result.

2) Control

How much control the user perceives having when working with the tool.

Question answers such as how much control the user retains in comparison to their usual method or if there is any other means of control the user is missing or didn’t have before, would be included here. Categories such as “speed” and

“control” are taken into consideration when judging whether or not the proposed workflow would be useful because these categories are very attractive to artists. “One of the most difcult challenges to virtual hairstyling remains to be creating intricate styles with a high level of user control in a short amount of time” (Ward et al. 2007).

3) Preference

Norman (2013) writes that whether or not a product is likely to be used or recommended is, among other things, based on a person’s emotional enjoyment of that product. The “Preference” category is meant to evaluate the testers enjoyment of the proposed workflow. How fun or intuitive do they find it to be?

Although it’s a completely subjective category, it is of great importance to understand how the testers reflect upon their enjoyment to better understand how useful the workflow would be and if it could be adapted into a hairstyling pipeline.

Whilst the three categories of perceptions are based on Norman's emphasis on users’

emotional response to design and Ward et al’s. definition of effective hairstyling, they also closely resemble the International Organisation for Standardizations definition of usability (​Usability Testing Essentials: Ready, Set...Test!​. Barnum 2010).

15

(16)

3.2 Delimitation

Methods for procedurally generating the placement of haircards are still quite novel.

There are documented findings regarding workflows for generating hair-band models for virtual hair. Psynema has produced a procedural hair node-network for Houdini (1996) called Hairdini (2018), used to generate hair meshes and associated textures ready for real-time rendering. Similarly, Activision Blizzard have been researching Procedural hair creation of both strand-based models and hair-band models. They presented a method of using “guide curves” to direct their Houdini node-network (Jlassi 2017), to result in either strand or band-based models, with the latter exported with all necessary textures to be used in real-time applications. Procedural alternatives to hair-strip placement has however not been investigated or compared in this project.

Whilst procedural techniques prove to be an interesting approach to hairstyling and modeling, this paper focuses on the improvement of manual placement of hair-strips.

Procedural techniques or alternatives to this step in the process, is therefore outside the scope of our research. This paper has also not been analysing or comparing the methods of creating stylized hair, and is limited to analysing approaches of hairstyling that strives for realistic looking hair.

16

(17)

4 Artefact

The development of a method to meet the requirements of the problem statement consequently became the defining and development of an Add-on, ​HairStruct​, a tool of its own within Blender(1998) to serve as a demo for how a single per wisp curve based controller workflow could look like. Working within an existing modeling software meant access to existing features that resembled desired features for the to-be-tested method. The Add-on could then be built upon the existing software to make use of it’s already available features and shape them into a package that would serve as a comprehensible toolset for styling hair, a hairtool.

During the development phase of the HairTool Senior Character Artist Calvin Verhoolen and Junior Character artist Erika Lochs from Ubisoft Berlin, worked as supporting, or supervising roles and participated in making decisions for the artefact through a regular feedback loop.

This meant getting better insights in how a desired workflow based on our problem statement would look like, how features may or may not be used, discussing different possibilities for features that could be complementing the workflow, as well as how to suitably demonstrate the method for other artists during testing.

4.1 Research

The proposed method for placing and styling hair has been developed with a few guidelines and conditions in mind. 1) It should support a pre-textured workflow as well as “hair-chunk geometry”, the method needs to support both single mesh objects and objects with multiple meshes (hair-chunks). 2) In order to test single per-wisp curve-based controls, Haircards (or hair-bands) should be possible to bend in multiple locations with individual directions using only one “controller”/Guide curve. 3) If/when possible, the method should be flexible enough that the user/tester has some freedom to work in a manner that works for them.

4.1.1 Related Research

The main inspiration for the hypothesized work-method comes from Ethan Snell’s (2018) video on stylized hair creation using Blender’s ​curves​. The video demonstrates how ​curves in Blender can be used with ​Ribbons ​to create wisp-like hair-shapes with tapered, polygonal hair. Whilst the content of Snell’s Video can’t fully be incorporated into a haircard (hair-band) workflow for “realistic looking” realtime hair, its principles felt worth exploring. Ultimately, the same curve editing tool in Blender used for​Blender Tutorial - Hair With Curves (ibid.) proved to be the easiest to adopt for a haircard based equivalent workflow as well.

17

(18)

Whilst most of the inspiration for the design of the features of HairStruct were taken from Blenders overall aesthetic and UX design. The Select by type feature was designed to mimic a tool from another program. GS CurveTool (2019) is a per-wisp curve based hair-tool for Maya that uses separate curve objects to deform haircard geometry. Like the select by type feature of HairStruct, GS-tool uses a selection filter of sorts to switch between being able to choose curve or mesh objects.

Practices by Lithvall lied as a foundation for a lot of the ideas which inspired us during the making of this artefact. Both the desire to use pre-textured haircards for styling as well as supporting hair-chunk are conditions for the method that was inspired by his online seminar “Creating Hair For Games” (2018)​.

4.1.2 Building upon available software

Most features to make a suitable method for the artefact come standard to any modeling software today, such as having some kind of curve tool and supporting both single and multiple mesh objects. The method to be tested would suit greatly within these modeling tools since it would allow the artist to stay within their software where they might have more components to their project such as the character model.

Making a workflow for any particular software will however most likely limit the usability of that exact workflow to that software, since no two modeling softwares work exactly alike.

Even though the tools might be available in the software does not mean that they are set up in a way that makes “our” method based on them convenient. The choice to develop an Add-on on top of any chosen software would give the developer the control to shape the user experience with the method in a way that could make it more accessible. The choice to create an Add-on for the proposed work method makes it possible to shape a feasible workflow from any software, despite however convoluted the actual setup might be. Additionally, it gives us the control to develop new features or solutions that we deem fitting or necessary for the proposed work-method.

4.1.3 Choosing the right software

When it came to deciding the most appropriate software to develop the hairtool artifact, two softwares were considered. Maya (1998) is considered the industry standard for all things modelling. It’s the software which is mentioned the most by professionals in the former parts of this paper and is also the prefered software out of our two candidates by the character artists at Ubisoft (Verhoolen & Lochs, 2020).

Furthermore, Maya already have well renowned tools for the hair creation process, such as Xgen (2014), used for simulating strand based hair or to create hair-textures.

18

(19)

The alternative to Maya would be to create the tool in Blender (1998). Whilst Blender does not have the same recognition within the industry, it’s a fully fledged modeling software that is also completely free and open source. Weighing the pros of both softwares seemingly puts Maya as the most suitable for this test. However, from our early research stages we hád gotten a better grasp of the built in features that would be used to test our method using Blender. Namely the fact that a per-wisp curve controller style workflow already could be set up in Blender without additional coding. Even if somewhat tedious to do, the safety net of already having the base in place swayed our decision to use Blender for this project.

Blenders scripting API is based on the programming language Python. Which is what has been used to develop the HairStruct hairtool.

4.2 Developing the Tool (HairStruct

At the initial stage of production Blender’s (ibid.) existing toolset was explored to see what features can lie as a foundation to a per-wisp curve-based workflow. Knowing how to go about setting up a curve based hairstyling workflow in the chosen software, without the need of any scripts, gave better insight as to what was actually needed to be improved upon as well as get a better look at any solutions that may or may not be used for scripting. Describing the manual workflow within Blender could also be a meaningful way to give insight to our perspective for how we developed the HairStruct hair tool as well as how Hairstruct has changed how you can interact and style hair in comparison to without using the Add-on. Without any additions, the two main ways to create per-wisp curve-based haircards in Blender that we have discovered are as follows:

A haircard palette is set up using MESH objects in Blender’s object mode. Each haircard may contain one or several meshes that are merged to create one haircard(hair-chunk if multiple). The purpose of the haircard palette is to serve as the table of contents of which the hairstyle can be assembled.

Option 1 Curve modifiers: A curve object is added in the scene, preferably located where the user wants the hair to be. Whichever haircard the user wants to deform along the curve is duplicated from the haircard palette. In the haircards modifier properties panel a curve modifier is applied and the curve object is selected as the modifier object (MeshObjectName > Modifiers > Curve > Target Object).

19

(20)

For the mesh to be deformed correctly along the length of the curve, the curve modifier’s deformation axis has to be set to match the axis of the length of the haircard. Additionally, the haircard object has to be moved to where it’s pivot point matches the pivot point of the curve object. Finally the haircard geometry has to be placed where it intersects with the mesh and curve object’s shared pivot point location.

If the pivot point is at the root of the haircard, which would have to be done manually, the curve now works as expected. If the pivot point is at the centre of the geometry, as is usual for objects, the “bounds clamp” option found in the Curve object's property editor (CurveObjectName > Object Data Properties > Shape) has to be enabled.

Additionally the “stretch” option found in the same location can also be enabled to make the length of the haircard transform to match the length of the curve, which might be a desirable feature.

Option 2 ​, Hair Particle system: ​A particle system is applied to the scalp’s mesh in Particle Properties (Object > Particles Properties) and Hair is selected as the particle type. To clear the mesh of particle hair, the particle emission number is turned down to zero. In the Particle Edit Mode, with the count set to one, the ​Add tool can be used to instance new individual hair-strand-particles. Every click of the mouse will then place one hair along the surface normals of the model's scalp. Still in Particle Edit Mode, the particle hair visualized as curves, can be styled using the ​Comb Tool​.

Whilst working with particle hair. It is possible to set up the particles to take the shape of any chosen object's geometry by editing it’s display type. This step was however not explored further.

To convert the hair-strand particles into bezier curves, navigate to the modifiers tab and select convert in the particle system submenu. By selecting the now converted hair geometry, it can thereafter be converted again to curves (Object > Convert to >

Curve from Mesh/Text). With the curves still selected, in Edit Mode, The spline type can be changed from ​path​ to ​bezier ​(Curve>Set Spline Type>Bezier).

The upsides to working with the particle-system in Blender is that it enables combing of curves using Particle Edit Mode as well as having a native tool to support adding curves against the surface normals of target geometry. However, using the particle system for adding single haircard curves to then edit using Edit Mode demands a longer process of converting objects and switching Blender modes. As a substitute for the normal-based particle-instancing, Blenders 3D cursor can be reconfigured in user preferences (Edit > Preferences > Keymap > 3D View > Set 3D Cursor > Orientation) to follow the geometry and surface normals of objects.

20

(21)

Image 1 Left: Orientation of surface normal retrieved from 3D cursor.

Right: Orientation retrieved automatically by placing particle hair.

In the interest of saving time, the process of instancing curve objects immediately rather than converting them from particle hair was chosen as the reference for the artefact.

Writing the Add-on itself can be done directly in Blender using the text editor window (Editor Type > Text Editor), as well as the built in python console (Editor Type >

Python Console). Blender’s API is based on the programming language Python, which we consequently had to use to write the Add-on. Fortunately, the Blender Foundation keeps decent documentation of its API (2020) and the program is open source, meaning there are plenty of hobbyists working with the API and sharing their findings on developer forums such as Stackexchange (2020) and Blenderartist (-).

4.2.1 HairStruct’s Feature

As described above, working with curve modifiers and curve editing in Blender(1998) already makes for a feasible workflow for styling haircards using per-wisp curve controllers. The process of setting up a workspace to enable this type of interaction is however convoluted and slow, making it an unattractive choice for hairstyling. The purpose of the hair-tool artefact is to offer a plug’n’play approach to this technique, making the already existing curve-editing function easy to access for curve controlled hairstyling. HairStruct is comprised of the following properties and features (See Appendix 1: ​HairStruct’s UI Panel​):

(Is Hair / Is Reference) Two major properties created were ​Is haircard ​and ​Is Reference-card​. These properties were created in order for various functions to work in desired ways. These properties are visible in the tool panel and indicate to the user whether an object is a haircard, a reference card or not in the hair-system at all.

Reference cards are all hair geometry in the Hair Palette that is to be used for instancing all haircards in the hairstyle.

21

(22)

(The Category System) The Category system allows you to assign different categories to the hair geometry categorized as ​reference cards​. Custom categories can be added and removed with the add and remove category buttons. The different instanced haircards and their control-curve will get the same category as the chosen reference card​. Instanced haircards will be moved to a collection (Blender folder) with the same name as the category they are assigned. Changing the category of a reference card will cause every haircard (mesh and curve object) that has been instanced by that ​reference card​ to inherit the new category.

(Deformation axis of Haircards) The ​Deformation Axis of Haircards option let’s the user define which axis their ​reference cards in the Hair Palette are placed along.

The ​Deformation Axis of Haircards ​option will transfer it’s properties to any instanced haircard, specifically, it will change the deformation axis used by the curve modifier that links the ​haircard​ and the ​control-curve.

(Place Haircard) The Place Haircard function is used for instancing new haircards in the user’s desired location. The haircard consists of both a duplicated reference-card​ object and a control curve linked to the mesh as a curve modifier.

The ​place haircard function uses either the current Selected Haircard (Selected reference card​) or a selected Haircard Category to pick the mesh object used for the haircard instance. The Curve component of the haircard is instanced with its start-point at the 3D-Cursor location and it’s length is inherited from the picked mesh objects length, which in turn is indicated by the Deformation Axis of Haircards option.

(Draw Haircard) Draw haircard is an alternative way of instantiating haircards.

This function puts the user in edit mode, with Blender’s draw tool active. This lets them draw their own curve with the mouse. A duplicate haircard mesh object, assigned by the Selected Haircard or Selected Haircard Category will then be applied on the drawn curve object. Like ​Place Haircard​, this feature uses the ​Deformation Axis of Haircards to decide on which axis the haircard will deform along.

Complementing the ​Draw Haircard is the ​Update Origin button. This button moves the haircard’s mesh object’s and curve object’s pivot-points to the root of the haircard.

(Switch Haircard) The Switch Haircard(s) function let’s the user replace the haircard mesh object of any selected haircard. Depending whether the instancing options are set to use the Selected Haircard or a Haircard Category, the switch function will either replace all selected haircards with the selected reference-object or choose a random ​reference card based on the chosen category, for each haircard selected.

22

(23)

The Function works by deleting the haircard’s old haircard mesh object and making a duplicate of the to be replacing ​reference card at the haircards curve object location.

Thereafter all preferences of the old haircard are copied to the new one. A new curve modifier is applied and the haircard curve is selected as the modifier object. Finally, the haircard curve updates its category according to the new haircard object.

(Export Hairstyle) The Export Hairstyle feature makes a copy of every piece of geometry that’s defined as a haircard, applies all deformations, including those from the haircards curve modifier and puts the copies in a new collection (See Appendix 2:

Export Panel). How the copies are merged and organized can be controlled through the tool’s export settings. The new copies will be merged together in one of three different ways and work as follows:

- “As Categories” merges all haircards that share the same haircard category.

- “As One Mesh” will merge all copies into one object.

- “As Individual Haircards” do not merge anything and all haircard copies remain as individual objects.

(Make Selectable by Type) Make selectable by type is a feature that allows the user to toggle what type of haircard object should be selectable. The selectable options are

“Both”, which lets the user select both curve and mesh haircard objects, “Curves”, which makes only haircard curve objects selectable, and “Mesh”, which renders only haircard mesh objects selectable.

Additionally, toggling the option “Mesh” with a curve selected will automatically target the selected curve’s mesh and vice versa. Toggling the option “Both” will select both the haircard’s mesh and its control-curve depending on what you had selected prior.

(Spider-Menu) The ​Spider-Menu is a pop-up menu that can be accessed anywhere in the 3D viewport by pressing “Shift” + “V” on the keyboard. The menu contains the functions ​Add Haircard, Draw Haircard, ​and ​Switch Haircard. The user can also access the ​Make Selectable by Type feature, and decide which haircard should be instanced in this menu.

23

(24)

4.2.2 Research and Development

HairStruct was developed using a scrum-like method where some core features were defined early on in production whilst supporting features were suggested based on the outcome of each weeks’ development. Senior Character Artist Calvin Verhoolen as well as Junior Character artist Erika Lochs from Ubisoft Berlin, acted as supporting roles during the development stages of ​Hairstruct​. Their Opinions and feedback helped inform the decisions which were taken throughout this stage of our research.

The Place Haircard feature was the first function created and is also the most prominently used throughout the tool. The purpose of the feature was to streamline the setup process of a single haircard, which, as described previously (See ​4.2 Developing the Tool (HairStruct)​) takes several steps to do manually. To make sense of this method, it was deemed highly important to achieve the setup with the ease of a single button. The first iteration of the tool was created by chaining together Blender-operators that a user would have to use to recreate the process manually in the Blender viewport (ibid.). The problem with using Blender operators instead of writing functions from the ground up is that operators are written to work specifically in the viewport. This means that viewport-specific conditions, such as selecting the objects you want to affect needed to be met to execute the operator. It is also not possible to modify or add to the different settings and variables existing Blender operators work with, but the operator will instead always create the same predetermined result. This consequently means that properties altered or created by a Blender-original operator needs to be changed after the fact, making for convoluted code.

The first iteration of the hairtool involved copying step by step the manual process of creating the haircard and curve. This iteration brought forth a few problems, (See Image 1).

Image 1 Resulting haircards using the first iteration of ​Place Haircard​ Feature

24

(25)

With the use of Blender’s operator to create a bezier curve, the created curve did not have an appropriate length. The script used Blender’s ​Add Bezier Curve operator to instance the​control-curve​. This meant the curve inherited the default path created by that operator, which didn’t allow for giving input as the length and properties of the curve. This resulted in you needing to manually drag the length of the curve to its appropriate length.

To remedy this, the decision to avoid existing Blender operators for when creating our own (Features in Add-ons are defined as operators too) was made. This meant an overhaul to the original ​Place Haircard ​function, in which we could define the parameters of the curves created. Unlike Blender’s operator, the overhauled ​Place Haircard curve was written to get its length from the object length of the ​Selected Haircard​.

Image 2. Iterated version of ​Place Haircard​ creating a curve based on the length of the ​reference card’s​ mesh.

To further try to reduce the amount of steps and repetitive movement the user had to perform when working with the hairtool, a ​Spider Menu was created. From this spider menu the user can access key functions anywhere in the 3D viewport and not just from the ​HairStruct UI Panel ​(See Appendix 3: ​Spider Menu​).

25

(26)

The ​Hair Category ​system was implemented for the purpose of easier organization.

When working with styling hair the user often has different layers of haircards, for example thicker haircards visualising larger wisps of hair and smaller haircards visualising smaller wisps of hair (Lithvall 2018). Apart from the category systems passive function, which is to organize all instanced haircards based on their given category, the system also enabled entirely new user options to be explored. With the category system and ​Is Reference Card property it was possible to implement an alternative method of instancing haircards.

The alternative method allowed you the option to not choose a specific haircard mesh object, but instead to pick one of the assigned categories. By selecting the desired category and instancing a haircard, the function will pick a random ​reference card from the chosen category.

The ​Make Selectable by Type feature was made for the purpose of giving the user easier control of their selection. While testing our method it became noticeably frustrating and difficult to select the desired element without accidentally selecting nearby elements as well. This was especially apparent if the desired element was the haircard curves, which often intersected with the bigger haircard mesh objects. From research on similar tools we found that the GS Curve Tools (2019) for Autodesk Maya (1998), had a clever solution to this problem. The ​Selectable by Type feature was developed with the aim to improve the overall quality of life of the tool, and to ease the users access to the right controls of their hairstyle.

The decision to create the ​switch haircard function came after having a dialog of any possibilities that would arise from having the haircard mesh and it’s deformation curve stored in different objects, as is how our tool works. Swapping out the mesh object of a haircard consequently one of the ideas we deemed interesting enough to pursue in the hairtool. Another idea, based on the same concept, was to have a function that would change out the entire collection of haircards used for the hairstyle, thinking this could bring a nuance of flexibility and user control to the tool as a whole. As a proof of concept for both ideas, the first option of the two made it into development.

The decision to look into the draw haircard feature was brought up from interest by Verhoolen and Lochs. By incorporating Blenders ​Draw Tool, ​the ​Draw Haircard feature can instance a haircard linked to an empty curve object, that can later be drawn by the user in edit mode. Additional settings that control how the drawn curve will be placed in the 3D viewport can be changed in the ​Draw Tool, tool settings.

Another notable feature that was discussed with Verhoolen and Lochs was to include physics simulation in the progress of placement. This idea was explored but cut due to the inherent cost developing such a feature.

26

(27)

4.2.3 Creating a Tutorial Segment

In order for our testers to understand our tool and the workflow surrounding it, a series of video-tutorials was recorded (See Appendix 4: ​Getting Started with HairStruct (Thesis Test Tutorials)​. The tutorials were divided in segments making for seven short videos, each demonstrating and explaining a different part of the tool, how it worked and how to use it. The videos explained 1) how to install the tool and how to set up the 3D Cursor to work as desired. 2) how to work with the Setup Panel, explain what categories are, how to assign categories and what they do. 3) Placement of haircards as well as their instancing options, including the difference between selected haircard instancing and ​selected category instancing. 4) How to manipulate and deform the haircard geometry (Styling the haircards), what objects should be selected for which haircard controls, the purpose and use of the ​select by type feature and different curve presets. 5) The draw haircard feature as well as some styling options and tool preferences that alters the result of the draw-tool. 6) The workings of the ​Switch Haircard feature and finally 7), The Export Hairstyle function and its different export preferences.

The recordings were made using Nvidia Shadowplay (2013) and consisted of a walkthrough of the different functions and tools relevant to the workflow, voiced over with explanations as well as any additional information relevant to that segment.

An alternative tutorial format could have been a PDF document containing images and text. Consultation with Verhoolen and Lochs revealed that their preferred tutorial format for learning a new tool was through videos. It was their opinion that software information often was more easily conveyed in a video compared to a book styled format. A PDF document might be easier to have access to simultaneously as you work, but since the relevant information could more easily be conveyed in short videos, and because the testers are likely used to video tutorials, that became the chosen format.

27

(28)

5 Evaluation

5.1 Result

39 artists were approached to participate in the test of which 4 artists participated. All of the testers had previous experience with hairstyling for games and had created several hair pieces professionally; either in house, on freelancing contracts or for personal projects. In total the artists had worked on a multitude of different projects as well as worked with different kinds of hairstyles and techniques. All testers who were approached and took part of the testing were therefore considered experts within the field.

Together, the artists from our testing population represented wide experience within the field of virtual hairstyling. Their experience made them good candidates to evaluate the usability of the artefact, and gives arguable substance to their opinions about the workflow presented to them.

Below, we present the result gathered from each person’s testing and interview.

Person 1:

Person nr. 1 currently styles hair by manually placing haircards in Maya (1998). They have experience with creating a variety of hair, such as short, long and curly hair, as well as facial hair. Beyond that they have about 7 years of experience as a character artist.

The person perceived the artefacts-method of styling hair to be more straightforward than their usual method and described the experience of the workflow as a streamlined process. They appreciated that the artefact was not overly complicated and said that they wanted to experiment more with the artefact in the future.

They felt the control of the haircards to be quite nice and estimated that they could get used to this workflow by spending a few days playing around and practicing with the tool. Being a novice Blender user, test person number 1 found the Scene (Blender workspace) controls using the 3D cursor, and its implementation in the artefact, to be pretty handy. They also liked the curve deformer technique for achieving per-wisp curve controls, and noted that they’ve been working in a similar fashion in 3DS Max (1996). They did also perceive some difficulty with the controls in Blender (1998) and felt to be limited in what they were able to do because of it. They feel that this workflow would be very effective for long hair. However for shorter hair, curly hair or fur, they would rather have a procedural solution for placing and styling the flow of the hair; because the sheer amount of control curves the user would have to control would be a very daunting task.

28

(29)

When needing to have control over minor details in every haircard, the tester said to would have preferred to use a per-wisp curve based workflow rather than manually moving around vertices and edges. Something that they would’ve liked to have is the ability to be able to use the mouse and click where they want a control segment to be added in the bezier curve.

One thing brought forth in the interview, as well as during the play session of the tool, was the need for certain actions or features to complete the hairstyle for the tester to export it for real-time use. Tester number one explained that something they feel to be missing is the ability to do normal retargeting, which is a very important step for them.

Normal retargeting is the process of altering the vertex normals to align accordingly to another surface. For hair creation it can be used to hide the planar surfaces of haircards by retargeting their normals to a unified mesh (See image 3). It would also be good to be able to bake ambient occlusion to the vertices. They also want a function that lets the user duplicate an already instanced haircard and move that along the scalp. A feature that would allow the user to see interpenetration of different haircards would also be nice according to them.

Image 3 Figure 1: Normals of haircards based on face orientation of its geometry (Default when modeling) Figure 2: Normals of haircards retargeted to a

sphere-like surface.

From observing the video recording of the testing we see that they experience some difficulty in the absolute beginning when attempting to rotate the haircards, very soon after that they understand what they did wrong and how it works. They also mention that in order to get that extra bit of control they would like the segments on the curve to control scale as well.

29

(30)

Summary: Person nr. 1 exhibited a clear liking towards a curve-based hair-modeling and described it as a nicely streamlined process for styling hair. The artist explained that in the case of needing tight control over individual wisps of hair (haircards), it would be preferable to work with curve based controls rather than editing the hairstyle polygon by polygon. In regards to only working with a single curve per hair-wisp, the artist found it to be very nice. The artist brought forth that for certain types of hair, like short hairstyles or fur, other kinds of control over the hair-wisp would be preferable. The artist also stressed the need for clear directives of how to handle certain export functions, which they would like to see in the same software as they would use to style the hair.

Person 2:

Person nr. 2 has been working with character modeling for a while and has been creating both female and male hairstyles of styles which the artist liked to categorize as

“more simple hairstyles”. They have worked with 2 different methods for hairstyling.

Their former method in Zbrush(1999) and current method using Blender(1998).

Overall, test person nr. 2 liked the tool and workflow and even preferred it to the workflow they’ve currently been using. Although they were pretty used to a per-wisp curve control workflow they thought this workflow, using the HairStruct artefact was better and was preferable.

Using curves to control deformation was well perceived, the motivation for this was that it lets you affect a lot of geometry with just one controller, or control point (curve bezier points). The tester found the controls to be intuitive, they thought that by seeing the tutorial and testing it out for an hour that they were able to understand it completely. The features that let you instance and generate the haircards were greatly prefered by them and was the main reason behind them preferring this workflow using the artefact, than doing it without it. They believe the features that let the user instance haircards led to a more time efficient workflow. As far as they could see, nothing was any slower with this workflow in comparison to their usual workflow. According to Them, they were also able to select the different haircards faster using the tool than without it.

From examining the recorded video from the testing, no apparent signs of them struggling with the controls is seen. This test was also the fastest and the tester was able to move to the interview before the 30 minutes of hands on time, which was given to the users, were over.

30

(31)

Person 3:

This person had mostly worked with xGen(2014) and had created hairstyles for both offline and real-time rendered scenarios. Their current workflow was to create the complete hairstyle in xGen and then convert the hair into haircards. They also had experience with creating multiple types of hairstyles, long hair, short hair as well as animal fur.

This person found the workflow to be very easy and intuitive and preferable to the method they’re currently using, they were able to very quickly get used to the controls even though they were not used to Blender. They described that working with curves was very important because alternatively moving and deforming vertices and edges could be very destructive to the meshes' typology and it’s UV’s. With a curve you have the ability to very easily add control segments to give you more control over the hair.

With this workflow they felt themselfes having good control of every single haircard.

They were very comfortable with the curve controls and did not feel like there was anything in particular they were not able to do using the curves. They especially liked the ​switch haircard feature, advocating for it using the following motivations:

“Switching the haircards is really helpful. It’s a common thing when you start that you begin with a blank canvas. You need to start from somewhere and at some point you might feel like that specific card doesn’t work and you need to switch it with something else. I think that works really well.”

The tester explained that they would have wanted the movement of control segments to be able to affect the rotation of the control segment above them and they would perceive this to be a more natural way of transforming curves. The tester found that using already created haircards to style the hairstyle is a lot faster than creating an entire hairstyle in xGen first, then lowering the resolution to a point of which the hairs can be turned into haircards. They liked having a setup of haircards to work with. This would allow them to spend less time on creating new haircards for every new hairstyle that they move to production. They said that this workflow is about twice as fast at creating a hairstyle as opposed to their usual workflow.

Looking at the recorded footage of the tester's interaction with the artefact, the artist showed no apparent signs of struggling with the controls. It looked like the artist was able to do what they wanted to do.

31

(32)

Person 4:

This individual has worked as a freelancing character and hairstyling artist and has created a wide variety of real-time hair. They are responsible for 35-40 hairstyles for an upcoming AAA game title. Their usual method consists of setting up “hair chunks”

in Maya and manually placing and styling them with the help of some deformers but mostly by manually moving the vertices and edges.

They found this method to be more streamlined than their usual method, they saw a lot of helpful tools that automate some processes. They specifically liked the ​Draw Haircard feature and believed it to be a huge time-saver. They also thought that the placing of haircards on the scalp was faster with the artefact, but stated that they believed that everything else would be slower for them using this workflow, mainly because they felt they would need more time playing around with it and getting used to it more. They mentioned that this workflow might be good for quickly achieving good flow of the hairstyle but that overall, they would currently prefer their method of manually moving the hair geometry. Even though they found themselves having a good amount of control with curves and mention that you had a lot of control over the hairs’ deformations with just one cuve, they still thought that they had more control when manually moving geometry. The artist mentions the biggest downside for them, using this method, is that little bit of lost control. By manually moving geometry they believe they can more quickly place the geometry where they want it to be. Moving vertices also allows them to crunch up and stretch the texture in some parts to achieve certain sought after results. The artist said that curves however would be a more safe way to work since there is less risk of ruining the geometry and textures when working with a curve in comparison to manually altering the hairs typology. The curve controls were also perceived as quite intuitive and they enjoyed being able to quickly scale, move and rotate the haircards.

In Maya they are able to make changes to a large volume of geometry, this is something they would like to be able to do with this tool as well.

From analysing the footage recorded from their interaction with the tool, difficulties with Blender can be seen. On multiple occasions they selected the wrong tool causing them to not know why certain actions were not possible. They also struggled with understanding how scaling the haircards worked.

32

References

Related documents

In the present study the distribution of uranium in single human hair shafts has been evaluated using two synchrotron radiation based micro X-ray fluorescence techniques; SR µ-XRF

Chewing gum and human hair as retrospective dosimeters Axel Israelsson.. Linköping University Medical

Special emphasis has been placed on voices used in the selected articles, the representation of social actors and terms introduced by the PISA-study and forwarded to the public

Bedömer ”A-typerna”, det vill säga de som inte tror att kartellen kommer att upptäckas vare sig utifrån eller inifrån, att motspelaren är en ”B-typ”, som tror att

Olivestam uttrycker en nackdel med konfessionella undervisningen där han förklarar att risken med en konfessionell undervisning är att elever som växer upp utan mångfaldig

I Think Aloud-undersökningen framkom det att deltagarna värdesatte den tydliga menyn och den enkla navigationen på den befintliga webbplatsen (se bilaga E: Webbplats vid

The Methods for creating realistic hair for realtime will examine and compare different methods that can be used to create computer graphics with the goal to be as visually akin

Utöver min revision av årsredovisningen har jag även utfört en revision av styrelsens och verkställande direktörens förvaltning för Noberu Distribution AB för år 2019 samt av