材质与纹理基础
一、材质节点的使用与理解
(一)材质节点的基本概念
1. 节点编辑器
材质节点是Blender中用于创建复杂材质和纹理的工具。通过节点编辑器,可以将不同的节点连接起来,创建出各种效果。节点编辑器位于Blender界面的底部编辑器区域,可以通过选择“Shader Editor”(着色器编辑器)来打开。
2. 常用节点
-
Principled BSDF:这是Blender中最常用的材质节点,可以模拟各种真实世界的材质效果,如塑料、金属、玻璃等。它包含多个参数,如基础颜色、粗糙度、金属度等。
-
Material Output:这是材质输出节点,所有材质节点的最终输出都连接到这个节点。
-
Texture Coordinate:提供纹理坐标,用于控制纹理在模型上的映射方式。
-
Mapping:用于调整纹理的缩放、旋转和平移。
-
Image Texture:用于加载和显示图像纹理。
-
Bump:用于创建凹凸效果,使模型表面看起来更加真实。
(二)创建和连接节点
1. 创建节点
在节点编辑器中,点击“Shift + A”键,弹出添加节点菜单。可以选择需要的节点类型,如“Shader”“Texture”“Vector”等。 例如,创建一个“Principled BSDF”节点和一个“Material Output”节点。
2. 连接节点
选中一个节点,将鼠标指针移动到节点的输出端(通常是节点的右侧),按住鼠标左键不放,拖动鼠标到另一个节点的输入端(通常是节点的左侧),松开鼠标左键,完成连接。 例如,将“Principled BSDF”节点的“BSDF”输出端连接到“Material Output”节点的“Surface”输入端。
(三)调整节点参数
1. 调整Principled BSDF参数
-
基础颜色(Base Color):设置材质的基本颜色。可以点击颜色选择框,弹出颜色选择器,选择所需的颜色。
-
粗糙度(Roughness):控制材质表面的粗糙程度。数值越高,表面越粗糙,反射越模糊。
-
金属度(Metallic):控制材质的金属属性。数值越高,材质越接近金属效果。
-
透明度(Transmission):控制材质的透明度。数值越高,材质越透明。
2. 调整Mapping节点参数
-
缩放(Scale):控制纹理的缩放比例。
-
旋转(Rotation):控制纹理的旋转角度。
-
平移(Location):控制纹理的平移位置。
二、基本纹理的创建与应用
(一)创建图像纹理
1. 加载图像纹理
-
在节点编辑器中,点击“Shift + A”键,添加一个“Image Texture”节点。
-
在“Image Texture”节点的属性面板中,点击“打开”按钮,选择需要的图像文件。
2. 连接纹理节点
将“Image Texture”节点的“Color”输出端连接到“Principled BSDF”节点的“Base Color”输入端。 例如,加载一张木纹图像纹理,连接到“Principled BSDF”节点的“Base Color”输入端,可以使模型表面显示木纹效果。
(二)创建程序纹理
1. 添加程序纹理节点
在节点编辑器中,点击“Shift + A”键,添加一个程序纹理节点,如“Noise Texture”“Voronoi Texture”等。例如,添加一个“Noise Texture”节点。
2. 连接程序纹理节点
将程序纹理节点的“Color”或“Fac”输出端连接到“Principled BSDF”节点的相应输入端。例如,将“Noise Texture”节点的“Fac”输出端连接到“Principled BSDF”节点的“Roughness”输入端,可以创建带有噪声效果的粗糙表面。
三、UV展开与贴图坐标
(一)UV展开
1. 概念
UV展开是将3D模型的表面展开成2D平面的过程,用于将2D纹理映射到3D模型上。UV展开的质量直接影响纹理在模型上的显示效果。
2. UV展开操作
-
选中模型对象,按“Tab”键进入编辑模式。
-
在3D视图的工具栏中,点击“UV”菜单,选择“展开”选项。
-
选择合适的UV展开算法,如“智能投影”“展开”等。智能投影适用于简单的模型,展开适用于复杂的模型。
(二)UV编辑器
1. 打开UV编辑器
在Blender界面的底部编辑器区域,选择“UV Editor”(UV编辑器)。
2. 调整UV岛
在UV编辑器中,可以看到模型的UV展开图。UV展开图由多个UV岛组成,每个UV岛对应模型的一个部分。可以使用鼠标左键点击并拖动UV岛,调整其位置。按“S”键可以缩放UV岛,按“R”键可以旋转UV岛。
(三)贴图坐标
1. 使用Texture Coordinate节点
-
在节点编辑器中,点击“Shift + A”键,添加一个“Texture Coordinate”节点。
-
“Texture Coordinate”节点提供多种坐标类型,如“UV”“Object”“Generated”等。
-
UV坐标:使用UV展开图的坐标,适用于大多数纹理映射。
-
Object坐标:使用模型的局部坐标,适用于不需要UV展开的简单纹理映射。
-
Generated坐标:自动生成的坐标,适用于一些程序纹理。
2. 连接Texture Coordinate节点
将“Texture Coordinate”节点的“UV”输出端连接到“Mapping”节点的“Vector”输入端,再将“Mapping”节点的“Vector”输出端连接到“Image Texture”节点的“Vector”输入端。 例如,使用UV坐标将图像纹理映射到模型上,通过“Mapping”节点调整纹理的缩放、旋转和平移。
四、绘制贴图(配合代码)
(一)、准备模型
1. 创建或导入模型
首先,你需要一个3D模型。可以使用Blender自带的建模工具创建模型,或者导入外部模型文件(如OBJ、FBX等)。
import bpy
bpy.ops.mesh.primitive_cube_add(size=2, enter_editmode=False, align='WORLD', location=(0, 0, 0))
(二)、设置UV映射
1. 进入编辑模式
选中模型,按Tab
键进入编辑模式。
2. 选择UV映射方式
在3D视图的工具栏中,点击“UV”菜单,选择合适的UV展开方式。常用的UV展开方式有“智能投影”“展开”等。
bpy.ops.uv.smart_project()
3. 调整UV岛
打开UV编辑器(在Blender界面的底部编辑器区域,选择“UV Editor”)。在UV编辑器中,可以看到模型的UV展开图。UV展开图由多个UV岛组成,每个UV岛对应模型的一个部分。使用鼠标左键点击并拖动UV岛,调整其位置。按S
键可以缩放UV岛,按R
键可以旋转UV岛。
bpy.ops.uv.select_all(action='SELECT')
bpy.ops.transform.translate(value=(0.1, 0.1, 0.0))
bpy.ops.transform.resize(value=(1.1, 1.1, 1.0))
(三)、绘制纹理
1. 创建纹理图像
在UV编辑器中,点击“新建”按钮,创建一个新的纹理图像。设置图像的尺寸和格式。
bpy.ops.image.new(name="Texture", width=1024, height=1024, color=(0.0, 0.0, 0.0, 1.0), alpha=True, generated_type='BLANK', float=False)
2. 进入纹理绘制模式
在3D视图中,按Tab
键切换到绘制模式(Texture Paint模式)。
3. 选择绘制工具
在工具栏中,选择绘制工具,如“画笔”“橡皮擦”等。可以调整画笔的大小、强度和颜色。
bpy.context.scene.tool_settings.image_paint.brush.size = 50
bpy.context.scene.tool_settings.image_paint.brush.strength = 0.5
bpy.context.scene.tool_settings.image_paint.brush.color = (1.0, 0.0, 0.0) # 红色
4. 绘制纹理
在3D视图中,使用鼠标左键在模型表面绘制纹理。可以按住Shift
键进行精细绘制。
(四)、应用纹理到模型上
1. 创建材质
选中模型,进入材质属性面板(图标是一个小球)。点击“新建”按钮,创建一个新的材质。
2. 添加纹理节点
在节点编辑器中,点击Shift + A
键,添加一个“Image Texture”节点。选择刚才创建的纹理图像:
bpy.data.images['Texture'].filepath = 'D:/Path/To/Your/Texture.png'
3. 连接节点
将“Image Texture”节点的“Color”输出端连接到“Principled BSDF”节点的“Base Color”输入端。
bpy.data.materials['Material'].node_tree.nodes['Principled BSDF'].inputs['Base Color'].default_value = (1.0, 0.0, 0.0, 1.0)
bpy.data.materials['Material'].node_tree.links.new(
bpy.data.materials['Material'].node_tree.nodes['Principled BSDF'].inputs['Base Color'],
bpy.data.materials['Material'].node_tree.nodes['Image Texture'].outputs['Color']
)
4. 设置UV坐标
在节点编辑器中,点击Shift + A
键,添加一个“Texture Coordinate”节点。
将“Texture Coordinate”节点的“UV”输出端连接到“Mapping”节点的“Vector”输入端,再将“Mapping”节点的“Vector”输出端连接到“Image Texture”节点的“Vector”输入端。
bpy.data.materials['Material'].node_tree.links.new(
bpy.data.materials['Material'].node_tree.nodes['Mapping'].inputs['Vector'],
bpy.data.materials['Material'].node_tree.nodes['Texture Coordinate'].outputs['UV']
)
bpy.data.materials['Material'].node_tree.links.new(
bpy.data.materials['Material'].node_tree.nodes['Image Texture'].inputs['Vector'],
bpy.data.materials['Material'].node_tree.nodes['Mapping'].outputs['Vector']
)
(五)、渲染和输出
1. 渲染设置
在渲染属性面板中,设置渲染的分辨率、帧范围、采样次数和输出路径。选择合适的渲染引擎(如Eevee或Cycles),进行渲染。
bpy.context.scene.render.resolution = 1920
bpy.context.scene.render.resolution_y = 1080
2. 输出设置
设置输出文件的格式和路径。可以选择输出为图像文件(如PNG、JPEG)或视频文件(如MP4、AVI)。
bpy.context.scene.render.filepath = 'D:/Render/MyProject/'
视频讲解
BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)