python3d引擎
A. Ren'Py引擎从入门到放弃(支线10)——3D渲染1
在探索 Ren'Py 引擎中实现 3D 渲染的途中,我遇到了一系列挑战,其中最令我头疼的问题是如何配置所需的环境。在 bitsawer 在 GitHub 上发布的 renpy-shader 项目中,我发现项目已经四五年没有更新了,最后一次更新仅仅是修改了 README 文件,提及某款包含不适宜内容的游戏采用了该项目的某些技术。尽管如此,项目中的大部分代码仍然可以在最近的 7.5 版本上运行。
在尝试配置时,我首先下载了项目文件,并按照 README 中的 Installation 指南将各种文件放置在对应位置。实际上,只需要将 pythonlib2.7 目录中的 ctypes 中的 util.py 文件复制到 SDK 同名目录下,以及确保 PyOpenGL 的版本(尽管 README 中建议使用 3.1.1a1,实际上更高的版本也是可以的,因为最终都会报错)在具体项目或 SDK 中均可。
在配置完成后,尝试运行 ShaderDemo 项目时,我遇到了一个令人困惑的提示:项目不支持。为了绕过这个问题,我直接在任意的 rpy 文件中加入一句代码,强制使用 gl 渲染器,成功运行了 ShaderDemo。但这里有一个友情提示:在 gl2 渲染器下尝试进行 3D 渲染时,你可能会直接遇到一个 1282 错误,这是无效操作的提示。此外,shader 模块在渲染过程中的某些标识项与 gl2 存在冲突,可能会引发各种令人头疼的错误。
接下来,我面对的是如何导入模型文件和纹理的问题。为了解决这个问题,我提供了一段示例代码,定义了一个名为 cube3d 的界面,其中添加了一个自定义可视组件 ShaderDisplayable,并将它放置在界面中心。在配置正确的情况下,运行这段代码可以观察到一个画面中心旋转的立方体。这个立方体没有纹理贴图,其各个面上的颜色是着色器“shader.PS_3D_NORMALS”根据表面法线换算出来的。
若要使用带纹理坐标的模型并同时设置了纹理贴图,则在加载模型时需要添加纹理。比如,熟悉的奶牛模型就是通过这种方式呈现的。值得注意的是,ShaderDisplayable 对象初始化时的第二个参数是一个 image,通常会在 image 目录下放置一张图片,渲染结果会与图片尺寸大小相匹配。
最后,我遇到了在加载模型过程中报错的问题。幸运的是,我发现原项目中存在一个 bug,需要对 shader 目录下的 mesh.py 文件进行修改以解决问题。后续的开发计划中,我可能会继续修复几个 bug,并深入讲解技术原理。