跳转到主要内容

基于wgpu-py的Shadertoy实现

项目描述

CI PyPI version

shadertoy

基于 wgpu-py 的 Shadertoy 实现。

简介

此库提供了一个易于使用的 Python 工具,可以从 Shadertoy.com 网站运行着色器程序。它提供了兼容性,让用户可以直接从网站上复制代码并在 wgpu-py 支持的各种 GUI 中运行,包括 Jupyter 笔记本。
支持将 Shadertoys 翻译为 wgsl,并使用统一变量 i_resolutioni_time 等。

此项目与 shadertoy.com 无关。

安装

pip install wgpu-shadertoy

用法

主要的 Shadertoy 类接受着色器代码作为字符串。

from wgpu_shadertoy import Shadertoy

shader_code = """
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    vec2 uv = fragCoord/iResolution.xy;
    vec3 col = 0.5 + 0.5*cos(iTime+uv.xyx+vec3(0,2,4));
    fragColor = vec4(col,1.0);
}
"""

shader = Shadertoy(shader_code, resolution=(800, 450))

if __name__ == "__main__":
    shader.show()

支持使用 ShadertoyChannel 类支持纹理输入。最多支持 4 个通道。

from wgpu_shadertoy import Shadertoy, ShadertoyChannel
from PIL import Image
import numpy as np

shader_code = """
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    vec2 uv = fragCoord/iResolution.xy;
    vec4 c0 = texture(iChannel0, 2.0*uv + iTime * 0.2);
    fragColor = c0;
}
"""

image_data = np.array(Image.open("./examples/screenshots/shadertoy_star.png"))
channel0 = ShadertoyChannel(image_data, wrap="repeat")
shader = Shadertoy(shader_code, resolution=(800, 450), inputs=[channel0])

当传递 off_screen=True 时,.snapshot() 方法允许您渲染特定的帧。

shader = Shadertoy(shader_code, resolution=(800, 450), off_screen=True)
frame0_data = shader.snapshot()
frame10_data = shader.snapshot(10.0)
frame0_img = Image.fromarray(np.asarray(frame0_data))
frame0_img.save("frame0.png")

更多示例请参阅 示例

状态

此项目仍在开发中。Shadertoy 网站的一些功能缺失,并且正在添加新功能。请查看问题以跟踪开发或自己贡献!有关进度,请参阅变更日志

许可证

本代码根据2条款BSD许可证进行分发。

行为准则

我们的行为准则可以在此找到: 行为准则

项目详情


下载文件

下载您平台对应的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

此版本没有提供源代码分发文件。请参阅有关生成分发存档的教程。

构建分发

wgpu_shadertoy-0.1.0-py3-none-any.whl (10.8 kB 查看哈希值)

上传时间 Python 3

支持者