语法
string material.name | 材料的名称。 |
string material.shader | 着色器名称。 默认值为“CityEngineShader”。 将其设置为“CityEnginePBRShader”时,意味着应使用基于物理的渲染属性,请参阅 PBR 材料属性。 |
float material.color.{r|g|b} | 漫反射颜色(非线性 sRGB)。 单独访问每个颜色组件。 默认值为白色。 请参阅 material.color 属性。 |
string material.color.rgb | 漫反射颜色。 以十六进制格式字符串访问完整颜色,例如 RED = "#ff0000"。 默认为 "#ffffff"。 请参阅 material.color 属性。 |
float material.ambient.{r|g|b} | 环境光颜色(非线性 sRGB)。 单独访问每个颜色组件。 默认值为黑色。 |
float material.specular.{r|g|b} | 镜面颜色(非线性 sRGB)。 单独访问每个颜色组件。 默认值为黑色。 |
float material.emissive.{r|g|b} | 自发光颜色(非线性 sRGB)。 单独访问每个颜色组件。 默认值为黑色。 |
float material.opacity | 不透明度因子。 1 表示完全不透明,0 表示完全透明。 默认值为 1。 |
float material.reflectivity | 反射率因子。 0 表示无反射,1 表示完全反射(针对反射贴图,在全景设置中进行设置)。 请注意,反射率取决于镜面颜色:默认黑色意味着无反射。 |
float material.shininess | Phong 镜面反射指数,范围介于 [0, 128] 之间。 默认值为 1。 |
float material.bumpValue | 控制凹凸比例因子(如果设置了 material.bumpmap)。 默认值为 1。 |
float material.metallic | 控制金属因子(如果设置了 material.metallicmap)。 0 表示介电材料,1 表示金属材料。 默认值为 0。 |
float material.roughness | 控制粗糙度因子(如果设置了 material.roughnessmap)。 0 表示完全平滑的材料,1 表示完全粗糙的材料。 默认值为 1。 |
bool material.doubleSided | 控制是否应该从面的两侧看到材料。 如果设置为 false,则应该仅可从法线指向的一侧看到材料。 默认值为 true。 |
string material.colormap | 纹理通道的纹理文件路径。 请参阅 material.map 属性。 |
string material.bumpmap | |
string material.dirtmap | |
string material.specularmap | |
string material.opacitymap | |
string material.normalmap | |
string material.emissivemap | |
string material.occlusionmap | |
string material.roughnessmap | |
string material.metallicmap | |
float material.{colormap|...|metallicmap}.s{u|v} | 每个通道纹理缩放因子。 |
float material.{colormap|...|metallicmap}.t{u|v} | 每个通道纹理平移因子。 |
float material.{colormap|...|metallicmap}.rw | 每个通道纹理旋转因子。 纹理将围绕 w 轴进行旋转(w 为 u 和 v 的叉积)。 |
string material.opacitymap.mode | 控制如何将不透明度贴图与色彩映射表相结合。 有效值包括“blend”、“mask”和“opaque”。 默认值为“blend”。 |
float material.opacitymap.cutoff | 当 material.opacitymap.mode 设置为“mask”时,material.opacitymap.cutoff 属性用于指定中断阈值。 如果 alpha 值大于或等于中断值,则将渲染为完全不透明,否则渲染为完全透明。 对于“mask”之外的其他模式,将忽略该属性。 默认值为 0.5。 |
材料形状属性用于控制形状几何的着色、纹理和导出。 CityEngine 支持具有固定语义的十个纹理通道。
所有这些属性均可使用 set 或 setMaterial 操作进行更改。 可使用 print 操作输出某一材料属性的值,例如 print(material.color.r)。
PBR 材料属性
一些材料属性仅适用于基于物理的渲染 (PBR) 着色器。 这些投影为:
- material.emissivemap
- material.occlusionmap
- material.roughnessmap
- material.metallicmap
- material.emissive.{r|g|b}
- material.metallic
- material.roughness
如果着色器名称设置为“CityEnginePBRShader”,则支持 PBR 材料的视口和编码器将使用这些属性以及
- material.color.{r|g|b}
- material.colormap
- material.normalmap
- material.opacity
- material.opacitymap
- material.opacitymap.mode
- material.opacitymap.cutoff
属性。
下面介绍了 CGA 材料属性如何符合 GLTF 材料规范,该规范以基于物理的渲染 (PBR) 为依据。
CGA 材料属性 | GLTF 材料规范 |
---|---|
material.color.{r|g|b} | pbrMetallicRoughness.baseColorFactor,RGB 组件 |
material.opacity | pbrMetallicRoughness.baseColorFactor,A 组件 |
material.colormap | pbrMetallicRoughness.baseColorTexture,RGB 通道 |
material.opacitymap | pbrMetallicRoughness.baseColorTexture,A 通道 |
material.metallic | pbrMetallicRoughness.metallicFactor |
material.roughness | pbrMetallicRoughness.roughnessFactor |
material.metallicmap,B 通道 | pbrMetallicRoughness.metallicRoughnessTexture,B 通道 |
material.roughnessmap,G 通道 | pbrMetallicRoughness.metallicRoughnessTexture,G 通道 |
material.normalmap | normalTexture |
material.occlusionmap,R 通道 | occlusionTexture,R 通道 |
material.emissivemap | emissiveTexture ,RGB 通道 |
material.emissive {r|g|b} | emissiveFactor ,RGB 组件 |
material.opacitymap.mode | alphaMode |
material.opacitymap.cutoff | alphaCutoff |
渲染、导入和导出
对于资产和生成的模型预览、导入以及对于导出生成的模型,需要在材料属性和相应格式之间来回映射。 下表显示了哪些格式实施哪些要素。 此表仅列出了与 CGA 有关的格式,而不是常规 CityEngine。
基本材料属性
扩展模块 | name | 着色器 | color | 色彩映射表 | 脏蚀贴图 | ||
显示 | 资产预览/3D 视口 | N | Y1 | Y2 | Y2 | Y2 | |
导入 | Khronos Collada | .dae/.kml/.kmz | Y | N | Y3 | Y3 | Y |
Autodesk DWG | .dwg | N | N | Y | Y | N | |
Autodesk FBX | .fbx | Y | N | Y | Y | Y | |
Khronos glTF | .gltf/.glb | Y | N | Y | Y | N | |
buildingSMART IFC | .ifc | N | N | Y | N | N | |
Wavefront OBJ | .obj | Y | N | Y | Y | N | |
通用场景描述 (USD) | .usda/.usdc/.usdz | N | N | Y | Y | N | |
导出 | Alembic | .abc | Y | Y | Y | Y | Y |
Khronos Collada | .dae/.kml/.kmz | Y | N | Y3 | Y3 | Y | |
Autodesk DWG | .dwg | N | N | Y | Y | N | |
Autodesk FBX | .fbx | Y | N | Y | Y | Y | |
Esri FileGDB | .gdb | N | N | Y | Y | N | |
Khronos glTF | .gltf/.glb | Y | N | Y | Y | N | |
buildingSMART IFC | .ifc | N | N | Y | N | N | |
Wavefront OBJ | .obj | Y | N | Y | Y | N | |
场景图层包 (SLPK) | .slpk | N | N | Y | Y | N | |
Unreal Datasmith | .udatasmith | Y | Y | Y | Y | Y | |
通用场景描述 (USD) | .usdc/.usdz | Y | Y4 | Y5 | Y | N | |
Vue | .vob | Y | N | Y | Y | Y |
- 1 对于视窗,着色器名称用于在标准渲染和 PBR 渲染之间进行切换,请参阅上面的 PBR 材料属性部分。
- 2 在视口中,色彩映射表和脏蚀贴图值将使用(漫反射)颜色进行倍增。
- 3 COLLADA 官方标准不同时支持漫反射纯色和漫反射纹理。
- 4 USD 导出器始终会创建 USDPreviewSurface 着色器。 如果着色器名称设置为 PBR,则还将导出 PBR 属性(请参阅上面的 PBR 材料属性)。
- 5 如果存在贴图,则将忽略对象的标量值。
高级材料属性
不透明度 | 不透明贴图 | opacitymap.mode | opacitymap.cutoff | 法线贴图 | doubleSided | ||
显示 | 视窗 | Y | Y | Y | Y | Y | N |
导入 | Collada | Y | Y | N | N | Y | Y7 |
DWG | Y | Y | N | N | N | N | |
FBX | Y | Y | N | N | Y | N | |
glTF | Y | Y | Y | Y | Y | Y | |
IFC | Y | N | N | N | N | N | |
OBJ | Y | Y | N | N | N | N | |
USD | Y | Y | Y | Y | Y | N | |
导出 | Alembic | Y | Y | Y | N | Y | N |
Collada | Y | Y | N | N | Y | N | |
DWG | Y | Y | N | N | N | N | |
FBX | Y | Y | N | N | Y | N | |
文件地理数据库 | Y | N | N | N | N | Y | |
glTF | Y | Y | Y | Y | Y | Y | |
IFC | Y | N | N | N | N | N | |
OBJ | Y | Y | N | N | N | N | |
SLPK | Y | Y | N | N | Y | N | |
Unreal | Y | Y | Y | N | Y | N | |
USD | Y5 | Y | Y | Y | Y | N | |
Vue | Y | Y | N | N | N | N |
- 5 如果存在贴图,则将忽略对象的标量值。
- 7Collada 不直接支持“doubleSided”参数。 如果 Collada 文件由启用了“双侧”导出选项的“SketchUp”编写(= 将复制所有面),则导入器仅将其设置为 false。
旧版材料属性
环境光 | 镜面光 | 镜面贴图 | 反射光 | 光泽度 | 凹凸值 | 凹凸贴图 | ||
显示 | 视窗 | Y | Y | Y | Y | Y | Y | Y |
导入 | Collada | Y | Y | Y | Y | Y | Y | Y |
DWG | Y | Y | Y | Y | Y | Y | Y | |
FBX | Y | Y | Y | Y | Y | N | Y | |
glTF | N | N | N | N | N | N | N | |
IFC | N | N | N | N | N | N | N | |
OBJ | Y | Y | Y | N | Y | Y | Y | |
USD | N | N | N | N | N | N | N | |
导出 | Alembic | Y | Y | Y | Y | Y | Y | Y |
Collada | Y | Y | Y | Y | Y | Y | Y | |
DWG | Y | Y | Y | Y | Y | Y | Y | |
FBX | Y | Y | Y | Y | Y | N | Y | |
文件地理数据库 | N | N | N | N | N | N | N | |
glTF | N | N | N | N | N | N | N | |
IFC | N | N | N | N | N | N | N | |
OBJ | Y | Y | Y | N | Y | Y | Y | |
SLPK | Y | N | N | N | N | N | N | |
Unreal | Y | Y | Y | Y | Y | Y | Y | |
USD | N | N | N | Y | Y | Y | Y | |
Vue | N | Y | Y | N | N | N | N |
基于物理的渲染材料属性
自发光 | 自发光贴图 | 金属 | 金属度贴图 | 粗糙度 | 粗糙度贴图 | 遮挡贴图 | ||
显示 | 视窗 | Y | Y | Y | Y | Y | Y | Y |
导入 | Collada | N | N | N | N | N | N | N |
DWG | N | N | N | N | N | N | N | |
FBX | N | N | N | N | N | N | N | |
glTF | Y | Y | Y | Y | Y | Y | Y | |
IFC | N | N | N | N | N | N | N | |
OBJ | N | N | N | N | N | N | N | |
USD | Y | Y | Y | Y | Y | Y | Y | |
导出 | Alembic | Y | Y | Y | Y | Y | Y | Y |
Collada | N | N | N | N | N | N | N | |
DWG | N | N | N | N | N | N | N | |
FBX | N | N | N | N | N | N | N | |
文件地理数据库 | N | N | N | N | N | N | N | |
glTF | Y | Y | Y | Y | Y | Y | Y | |
IFC | N | N | N | N | N | N | N | |
OBJ | N | N | N | N | N | N | N | |
SLPK | Y | Y | Y | Y | Y | Y | Y | |
Unreal | Y | Y | Y | Y | Y | Y | Y | |
USD | Y | Y | Y5 | Y | Y5 | Y | Y | |
Vue | N | N | N | N | N | N | N |
- 5 如果存在贴图,则将忽略对象的标量值。
地图变换材料属性
map.tu/.tv | map.su/.sv | map.rw | ||
显示 | 视窗 | Y | Y | Y |
导入 | Collada | N | N | N |
DWG | N | N | N | |
FBX | N | N | N | |
glTF | Y 6 | Y 6 | Y 6 | |
IFC | N | N | N | |
OBJ | N | Y | N | |
USD | Y | Y | Y | |
导出 | Alembic | N | N | N |
Collada | N | N | N | |
DWG | N | N | N | |
FBX | Y | Y | Y | |
文件地理数据库 | N | N | N | |
glTF | Y 6 | Y 6 | Y 6 | |
IFC | N | N | N | |
OBJ | N | N | N | |
SLPK | N | N | N | |
Unreal | Y | Y | Y | |
USD | Y | Y | Y | |
Vue | Y | Y | N |
- 使用 KHR_texture_transform 扩展模块读取和写入 6 个转换。
相关内容
示例
attr wallC = "#FFFFFF"
attr wallTexture = "facade/walls/wall.c.09.tif"
attr dirtTexture = "dirtmaps/dirtmap.16.tif"
...
Wall -->
primitiveCube() color(wallC)
set(material.colormap, wallTexture) projectUV(0)
set(material.dirtmap, dirtTexture) projectUV(2)