You're blocking ads, which pay for BlenderNation. Read about other ways to support us.

Behind the Scenes: Moorish Afternoon

0

Me and Blender

Hi, my name is George Bestelei, 41, and I'm a self-educated 3D generalist based in Bucharest. A few years ago I got exposed to Blender while working on a project and I was intrigued by its capabilities. Recently, I got curious again, with all the hype around 2.80, and finally, since everyone accepted that the norm for right-click usage is secondary ammo/grenades, I decided to add it permanently to my toolbox. Of course, solving problems like the ones I describe here is part of the fun of every day learning and discovery.

I also like Blender for being more than just a software: a symbol for what we can do outside the consumerist frame. And the people around this liberating piece of software are amazing as well.

Moorish Afternoon

This project is a part of my personal exploration of Blender, especially lighting, materials and plants. I drew inspiration from a documentary movie about North Africa. This particular image represents a corner of Chefchaouen, Morocco.

While modeling was pretty standard and most of the materials are PBR setups produced in Substance Painter, I chose to experiment with material setup and texture painting for adjustments.

Several of the objects are from different free sources. The lantern and some low poly pottery are from Blendswap and the potted plants are from a Sketchup collection file that I had to prepare in 3ds Max, because blender importer couldn’t get the textures correctly.

Ivy Leaf Variations

Not a very visible element, but part of my study process. As the Ivy generator leaves were too aligned, I wanted to introduce a touch of randomness. I knew that I could modify texture rotation in the Shader Editor. Then, I discovered that Blender does not yet have sub-object IDs to control the variation of a material on a single object. The solution I used to control the UV rotation of leaf texture was to use random select/deselect leaf faces in steps of 30%, and to assign one of the three material variations (leaf orientations). This has the added advantage of breaking the uniform colored patches that have been created by mixing a noise driven ramp with the original texture.

Here is the node tree for Z rotation of a texture:

A more in depth explanation here.

The Tree

For the tree, I tested the Grove add-on. My assessment is that it is very capable in terms of realism and quality, but its concepts are kind of difficult to grasp, while its controls prove a bit unpredictable. The final tree is the result of countless attempts. What I liked is the ability to constrain the shape and growth in relation to surroundings (React section in Grove).

In the end, I manually tweaked the trunk and the twigs density in the particle emitters and the vertex groups that control them.

Assets

At first, I considered dressing the scene quickly with objects collected from the Internet, but since I couldn’t find exactly what I needed, I proceeded to build my own assets. This way, I was able to keep closer to the original reference.

EEVEE animation

My goal was also to test EEVEE. After I found the solution to the light passing through the walls with Solidify modifier, tweaking light source bias, and throwing an Irradiance cube into the scene, I set up a camera traveling on a path. Close to the end there is a “Track to” constraint applied to the camera with animated influence. Even a simple camera animation can be tricky and, as I found out, the constraint doesn’t work with the camera following a path. This was simply addressed by animating a box along the path and parenting the camera position to it. Finally, the rendered frames are composited in After Effects, where I added sound and fades.

Script commands (bonus)

Not especially related to this project, these script commands prove handy in some large scenes. They were made by the community at my plea for help.

Select objects with same number of verts - for the case of unlinked multiple object copies.

import bpy

ACT_OBJ = bpy.context.active_object
ACT_VRTS = ACT_OBJ.data.vertices
SCN_OBJS = [m for m in bpy.context.scene.objects if m.type == 'MESH']for OBJS in SCN_OBJS:
    if len(ACT_VRTS) == len(OBJS.data.vertices):
        OBJS.select_set(state=True)

Select objects with multiple UVs - exporting to painter with more than one UV channel can be problematic and some add-ons and operations can create those stealthily.

import bpy

bpy.ops.object.select_all(action='DESELECT')
mesh_objects = [o for o in bpy.context.scene.objects if o.type == 'MESH']for o in mesh_objects:
	if  len(o.data.uv_layers)>1:
    	o.select_set(True)

Select objects without UVs - for when you finish modeling a large scene.

import bpy

bpy.ops.object.select_all(action='DESELECT')
mesh_objects = [o for o in bpy.context.scene.objects if o.type == 'MESH']for o in mesh_objects:
    if not o.data.uv_layers:
        o.select_set(True)

Remove extra UV layers - keep only the active UVs.

import bpy

for me in bpy.data.meshes:
	uvs = [uv for uv in me.uv_layers
        	if uv !=  me.uv_layers.active]while uvs:
    	me.uv_layers.remove(uvs.pop())

Thanks for reading and have fun blending!

About the Author

bestelix profile picGeorge Bestelei, 3D Generalist

 

 

Leave A Reply

To add a profile picture to your message, register your email address with Gravatar.com. To protect your email address, create an account on BlenderNation and log in when posting a message.