一个简单、轻量级的用于Panda3D的PBR渲染管道

panda3d-simplepbr的Python项目详细描述


Build StatusPanda3D Versions

panda3d simplepbr公司

这是一个用于Panda3D的简单、基本、轻量级、无装饰的PBR呈现管道。 它目前打算与panda3d-gltf一起使用,它将以正确的顺序输出纹理。 PBR着色器深受Khronos glTF Sample Viewer的启发。 注意:此项目不尝试匹配引用呈现器。在

特点

  • 支持在多种硬件上运行,并具有简单的OpenGL 2.1+要求
  • 前涂金属粗糙PBR
  • 所有Panda3D光源类型(点光源、定向光源、聚光灯和环境光灯)
  • 电影色调映射
  • 法线贴图
  • 发射贴图
  • 遮挡贴图
  • 方向光和聚光灯的基本阴影贴图

著名的TODO

还有几件大事还没有完成,计划实施:

  • 点光源的阴影贴图
  • IBL漫反射
  • IBL镜面反射

其他缺少的功能

我们的目标是保持这个简单和轻量级。 因此,以下缺少的功能是not,目前在路线图中:

  • 处理多个灯光(例如,延迟、转发+、平铺、群集等)
  • 奇特的后期处理效果(时间消除混叠、环境光遮挡、屏幕空间反射)
  • 环境探测器

安装

使用pip安装panda3d-simplepbr包:

pip install panda3d-simplepbr

要获取最新的开发版本,请使用:

^{pr2}$

使用

只需将simplepbr.init()添加到ShowBase实例中:

fromdirect.showbase.ShowBaseimportShowBaseimportsimplepbrclassApp(ShowBase):def__init__(self):super().__init__()simplepbr.init()

init()函数将选择典型的默认值,但可以通过关键字参数修改以下内容:

render_node :也要附加着色器的节点,如果None,则默认为base.render

window :附加帧缓冲区的窗口也默认为base.win,如果None

camera_node :渲染场景时要使用的摄影机的节点路径,默认为base.cam,如果None

msaa_samples :用于多采样消除混叠的采样数,默认为4

max_lights :要渲染的最大灯光数,默认为8

use_normal_maps :使用法线贴图修改片段法线,默认为False(注意:需要定义了适当切线的模型)

use_emission_maps 使用发射贴图,默认为True

use_occlusion_maps 使用遮挡贴图,默认为False(注意:需要金属粗糙度贴图中的遮挡通道)

enable_shadows :启用阴影贴图支持(使用点光源打断),默认为False

enable_fog :启用指数雾,默认为False

exposure :用于在色调映射之前乘以屏幕空间颜色值的值,默认为1.0

以后还可以通过设置init()函数返回的simplepbr管道的相关属性来修改这些参数:

pipeline=simplepbr.init()...pipeline.use_normals_map=True

纹理

着色器当前假定以下纹理位于这些插槽中:

  1. 基色
  2. 金属粗糙度
  3. 法线
  4. 排放

示例

对于使用panda3d-simplepbr的示例应用程序,请查看panda3d-gltf repo中的viewer。在

分发

当使用Panda3D的build_apps时,默认情况下不会复制数据文件(即着色器文件)。 我们正在探索使其更加自动化的选项,但目前,请将以下内容添加到setup.py

setup(# ...'package_data_dirs':{'simplepbr':[('simplepbr/shaders*','',{}),],}# ...)

运行测试

python setup.py test

许可证

B3D 3-Clause

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java无法打印/获取2D数组的特定行   java替换JSP web应用程序中的默认resourceBundle和resourceControl实现   java将地图坐标转换为屏幕坐标   Guava地图中的java惰性驱逐   反射Java getDeclaredConstructor失败,来自JUnit的NoSuchMethodException   java有一个基于正则表达式的web servlet过滤器。xml?   java如何在Android中隐藏/显示表单?   java 7的简单代码度量独立maven插件   sockets java中哪种技术可用于在两个不同系统之间传输大量同步数据?   java无法处理我的导航菜单项的单击事件   java阵列输出必须是一年中的几个月   java Elasticsearch错误:MapperParsingException:无法分析   java 安卓复制文件显示错误   JSF2.2JavaJSF网站使用BootsFaces页面直接构建   Java中while循环的BigO   java如何使用AspectJ在AOP中创建每个类、每个对象和每个方法/源位置部分的方面   从地图查看java文本   java如何从线程触发PropertyChange事件?   java Spring引导在运行时添加和删除单例