python - 搅拌机渲染“位置:和带有 Pov Ray 插件的“UnboundLocalError”
问题描述
我不确定这是最好的地方,但我去...
我正在尝试使用 Blender 2.79b 的 Pov ray 插件渲染图像。当我这样做时,它只会向我展示一个丑陋的棋盘。
经过一番闲逛后,我单击了信息选项卡,它向我显示了这条小消息:
Traceback (most recent call last):
File "C:\Program Files\Blender Foundation\Blender\2.79\scripts\addons\render_povray\render.py", line 4147, in render
self._export(scene, povPath, renderImagePath)
File "C:\Program Files\Blender Foundation\Blender\2.79\scripts\addons\render_povray\render.py", line 3837, in _export
write_pov(self._temp_file_in, scene, info_callback)
File "C:\Program Files\Blender Foundation\Blender\2.79\scripts\addons\render_povray\render.py", line 3648, in write_pov
shading.writeMaterial(using_uberpov, DEF_MAT_NAME, scene, tabWrite, safety, comments, uniqueName, materialNames, material)
File "C:\Program Files\Blender Foundation\Blender\2.79\scripts\addons\render_povray\shading.py", line 251, in writeMaterial
if(t and t.use and validPath and
UnboundLocalError: local variable 'validPath' referenced before assignment
location: <unknown location>:-1
不幸的是,我并不真正了解 Python(或一般的编码),所以在我更好地理解它之前我不想接触任何东西。
解决方案
打开文件C:\Program Files\Blender Foundation\Blender\2.79\scripts\addons\render_povray\shading.py
并替换行
if material:
special_texture_found = False
for t in material.texture_slots:
if t and t.use and t.texture is not None:
if (t.texture.type == 'IMAGE' and t.texture.image) or t.texture.type != 'IMAGE':
validPath=True
else:
validPath=False
if(t and t.use and validPath and
(t.use_map_specular or t.use_map_raymir or t.use_map_normal or t.use_map_alpha)):
special_texture_found = True
continue # Some texture found
if special_texture_found or colored_specular_found:
# Level=1 Means No specular nor Mirror reflection
povHasnoSpecularMaps(Level=1)
# Level=3 Means Maximum Spec and Mirror
povHasnoSpecularMaps(Level=3)
使用 Blender 2.8 的更新插件中的以下代码。确保标识级别与原始文件中的相同。
if material:
special_texture_found = False
for t in material.texture_slots:
if t and t.use and t.texture is not None:
if (t.texture.type == 'IMAGE' and t.texture.image) or t.texture.type != 'IMAGE':
#validPath
if(t and t.use and
(t.use_map_specular or t.use_map_raymir or t.use_map_normal or t.use_map_alpha)):
special_texture_found = True
continue # Some texture found
if special_texture_found or colored_specular_found:
# Level=1 Means No specular nor Mirror reflection
povHasnoSpecularMaps(Level=1)
# Level=3 Means Maximum Spec and Mirror
povHasnoSpecularMaps(Level=3)
代码中的问题是 if-caseif (t.texture.type == 'IMAGE' and t.texture.image) or t.texture.type != 'IMAGE':
没有validPath
设置 else case。如果发生这种情况,则validPath
不会初始化,这会导致您遇到错误。
推荐阅读
- r - 从数据框中提取值
- python - 如何在 txt 文件中的特定位置放置换行符?
- powerbi - 如何将 Power BI 中的表从行转置为列
- javascript - 有没有办法加载脚本标签并在页面完全加载后执行它包含的脚本?
- ios - 如何根据 Apple ID 的全名设置 Firebase 用户的显示名称
- reactjs - history.push 重定向覆盖了我设置为不同的路径
- php - PhpSpreadsheet 读取 php 中的多个文件
- python - 矩阵向量差的有效元素 argmin
- mysql - 给定情况下的 SQL 查询优化
- julia - 陷入在 Julia 中安装软件包的无限循环中,找不到解决方案