Graphics: Texture

Graphics: Texture
ExisfarGraphics: Texture
有几种贴图?
在图形学中,贴图(Texture)是增强3D模型真实感和细节的核心技术。以下是12种常见贴图类型的分类详解,涵盖它们的作用、原理、应用场景及使用方法,结合代码和案例说明:
📌 1. 基础颜色贴图(Albedo/Diffuse Map)
• 作用:定义材质的基础颜色(无光照信息)。
• 为什么需要:分离颜色与光照计算,避免重复烘焙阴影。
• 格式:sRGB色彩空间(通常为PNG/JPG)。
• 用法示例(GLSL):
vec3 albedo = texture(albedoMap, uv).rgb; |
📌 2. 法线贴图(Normal Map)
• 作用:模拟表面凹凸细节(不改变几何体)。
• 为什么需要:低多边形模型表现高模细节。
• 原理:RGB通道存储切线空间法线向量(范围[-1,1]映射到[0,1])。
• 用法:
vec3 normal = texture(normalMap, uv).rgb * 2.0 - 1.0; // 转换到切线空间 |
📌 3. 粗糙度贴图(Roughness Map)
• 作用:控制表面微观粗糙度(0=镜面,1=完全漫反射)。
• PBR核心:决定高光反射的锐利程度。
• 用法:
float roughness = texture(roughnessMap, uv).r; |
📌 4. 金属度贴图(Metallic Map)
• 作用:标记金属(1)与非金属(0)区域。
• PBR规则:金属区域Albedo直接作为反射颜色。
• 示例:
float metallic = texture(metallicMap, uv).r; |
📌 5. 环境光遮蔽贴图(AO Map)
• 作用:预计算环境光遮蔽阴影(缝隙/凹陷处更暗)。
• 优化手段:替代实时全局光照计算。
• 用法:
float ao = texture(aoMap, uv).r; |
📌 6. 高度贴图(Height/Displacement Map)
• 作用:通过顶点位移实现真实几何凹凸(不同于法线贴图的视觉欺骗)。
• 格式:灰度图(白色=凸起,黑色=凹陷)。
• 细分曲面:需配合Tessellation使用(DirectX/OpenGL)。
// HLSL示例(曲面细分阶段) |
📌 7. 自发光贴图(Emissive Map)
• 作用:使部分表面发光(如霓虹灯、屏幕)。
• HDR支持:通常使用EXR格式存储高亮度值。
• 代码:
vec3 emission = texture(emissiveMap, uv).rgb * intensity; |
📌 8. 透明度贴图(Alpha Map)
• 作用:控制像素级透明度(如树叶、栅栏)。
• 通道:通常存储在Albedo贴图的Alpha通道。
float alpha = texture(albedoMap, uv).a; |
📌 9. 次表面散射贴图(Subsurface Scattering Map)
• 作用:模拟光线在半透明材质内的散射(皮肤、玉石)。
• 技术:需配合次表面散射算法(如Diffusion Profile)。
float sss = texture(sssMap, uv).r; |
📌 10. 曲率贴图(Curvature Map)
• 作用:标记表面曲率(凸起/凹陷边缘),用于边缘磨损特效。
• 生成方式:通过ZBrush/Mari等工具烘焙。
📌 11. 各向异性贴图(Anisotropy Map)
• 作用:控制各向异性高光(如拉丝金属、头发)。
• 原理:修改高光形状(非圆形)。
vec2 anisotropy = texture(anisotropyMap, uv).rg; |
📌 12. 遮罩贴图(Mask Map)
• 作用:混合多种材质(如泥土+石块)。
• 引擎应用:UE5的Virtual Texture系统。
float mask = texture(maskMap, uv).r; |
📌 贴图使用流程(以Blender为例)
- 导入贴图:
# Blender Python API
import bpy
texture = bpy.data.images.load("path/to/albedo.png") - 连接节点:
bsdf = mat.node_tree.nodes["Principled BSDF"]
tex_node = mat.node_tree.nodes.new("ShaderNodeTexImage")
tex_node.image = texture
mat.node_tree.links.new(tex_node.outputs[0], bsdf.inputs["Base Color"])
📌 为什么需要这么多贴图?
- 物理准确性:PBR要求多参数精确控制(如金属度/粗糙度分离)。
- 性能优化:预计算(如AO)替代实时计算。
- 艺术控制:允许美术师精细调整每个材质属性。
📌 学习资源
• 工具:Substance Painter(贴图制作)、RenderDoc(调试)。
• 书籍:《Real-Time Rendering》第4章。
• 教程:LearnOpenGL Textures。
掌握这些贴图,你就能驾驭从风格化卡通到影视级渲染的所有需求! 🎨
什么是PBR贴图?
您的问题非常关键!PBR贴图(Physically Based Rendering Textures) 实际上是上述多种贴图的组合使用规范,而非单一贴图类型。以下是针对PBR贴图的完整解析,补充说明其核心要点和实际应用:
📌 什么是PBR贴图?
PBR贴图是一组基于物理渲染规则的纹理组合,用于精确模拟真实世界材质的光学行为。它通过多张贴图协同工作,确保材质在不同光照环境下保持物理正确性(如能量守恒、微表面理论)。
📌 PBR贴图的核心成员
以下是PBR工作流中必须或常用的贴图类型及其作用:
贴图类型 | PBR中的作用 | 非PBR对比 |
---|---|---|
Albedo Map | 纯颜色信息(无光照阴影) | Diffuse Map可能包含烘焙光照 |
Normal Map | 表面微观几何细节(切线空间法线) | 同非PBR,但精度要求更高 |
Roughness Map | 控制微表面粗糙度(0=光滑,1=粗糙) | Gloss Map(1-粗糙度,易混淆) |
Metallic Map | 标记金属(1)与非金属(0)区域 | 旧流程用Specular Map模拟金属 |
AO Map | 环境光遮蔽阴影(增强缝隙暗部) | 非PBR中可能被Diffuse贴图合并 |
📌 为什么PBR需要特殊贴图?
- 物理一致性
• 金属度贴图:金属的反射颜色由Albedo直接定义(非金属反射为灰色)。
• 粗糙度贴图:统一控制高光散射范围,避免非PBR中“高光强度”和“模糊度”参数冲突。 - 动态光照适应性
PBR材质在任意HDR环境光下都能表现正确(传统材质需针对特定光照烘焙)。 - 标准化工作流
行业标准工具(Substance Painter、Quixel)默认输出PBR贴图集。
📌 PBR贴图使用示例(Unreal Engine)
// UE5材质节点示例 |
📌 常见PBR贴图组合
① 基础PBR套装(必备)
• T_Albedo.png
• T_Normal.png
• T_Roughness.png
• T_Metallic.png
• T_AO.png
(可选但推荐)
② 扩展PBR贴图(高级效果)
• T_Height.png
(视差遮挡)
• T_Subsurface.png
(皮肤/蜡质材质)
• T_Anisotropy.png
(拉丝金属)
📌 PBR贴图生成工具
-
手动制作
• Substance Painter:手绘/智能材质生成PBR贴图集。• Photoshop + NVIDIA Texture Tools:转换普通贴图为PBR格式。
-
AI生成
• Stable Diffusion + ControlNet:输入文本生成PBR贴图(需后处理)。• Materialize(免费工具):从单张照片生成PBR贴图。
📌 常见误区解答
❌ 误区1:PBR贴图是某种特殊文件格式。
✅ 事实:PBR是贴图的使用规范,格式仍为PNG/EXR等。
❌ 误区2:PBR必须配合光线追踪使用。
✅ 事实:PBR在光栅化(如UE4 Mobile)和光线追踪(如UE5 Lumen)中均可使用。
❌ 误区3:Roughness和Glossiness贴图可互换。
✅ 事实:Roughness = 1 - Glossiness
,需注意引擎约定(如Unity用Smoothness)。
📌 学习资源推荐
• 视频教程:
Substance Painter PBR全流程
• 论文:
《Physically Based Shading at Disney》
• 实践工具:
Marmoset Toolbag(实时PBR材质预览)
掌握PBR贴图,你就能产出符合3A游戏标准的材质! 🎮