基于wgpu-py的Shadertoy实现
项目描述
shadertoy
基于 wgpu-py 的 Shadertoy 实现。
简介
此库提供了一个易于使用的 Python 工具,可以从 Shadertoy.com 网站运行着色器程序。它提供了兼容性,让用户可以直接从网站上复制代码并在 wgpu-py 支持的各种 GUI 中运行,包括 Jupyter 笔记本。
支持将 Shadertoys 翻译为 wgsl,并使用统一变量 i_resolution
、i_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 查看哈希值)
关闭
wgpu_shadertoy-0.1.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2dece7e5c7691670ac67e7ff38cd68df501c00e36e6d56ab6989ad294c560e5a |
|
MD5 | 380d404486e1262a8e9fe822a9432878 |
|
BLAKE2b-256 | 5dd738f008570f7869bfa236b1f9ddf1391fb7bd2019c04373dd969089777714 |