Skip to content

dreamanlan/Hlsl2Numpy

Repository files navigation

Hlsl2Numpy

translate shadertoy shader to python

命令行

Usage:Hlsl2Numpy [-out outfile] [-args arg_dsl_file] [-notshadertoy] [-gl] [-profiling] [-torch] [-autodiff] [-gendsl] [-rewritedsl] [-printblocks] [-printfinalblocks] [-printgraph] [-printfinalgraph] [-printvecvars] [-unroll] [-novecterization] [-noconst] [-multiple] [-maxloop max_loop] [-debug] [-src ] hlsl_file
 [-out outfile] output file path and name
 [-args arg_dsl_file] config file path and name, default is [hlsl_file_name]_args.dsl
 [-notshadertoy] not shadertoy mode [-shadertoy] shadertoy mode (default)
 [-gl] render with opengl [-ngl] render with matplotlib (default)
 [-profiling] profiling mode [-notprofiling] normal mode (default)
 [-torch] use pytorch lib [-notorch] dont use pytorch lib (default)
 [-autodiff] autodiff mode, only valid with torch mode [-noautodiff] normal mode (default)
 [-gendsl] generate prune dsl and final dsl [-notgendsl] dont generate prune dsl and final dsl (default)
 [-rewritedsl] rewrite [hlsl_file_name].dsl to [hlsl_file_name].txt [-notrewritedsl] dont rewrite dsl (default)
 [-printblocks] output dataflow structure built in scalar phase [-notprintblocks] dont output (default)
 [-printfinalblocks] output dataflow structure built in vectorizing phase [-notprintfinalblocks] dont output (default)
 [-printgraph] output compute graph built in scalar phase [-notprintgraph] dont output (default)
 [-printfinalgraph] output compute graph built in vectorizing phase [-notprintfinalgraph] dont output (default)
 [-printvecvars] output vectorized var by compute graph [-notprintvecvars] dont output (default)
 [-unroll] unroll loop [-notunroll] dont unroll loop (default)
 [-novecterization] dont do vectorization [-vecterization] do vectorization (default)
 [-noconst] dont do const propagation [-const] do const propagation (default)
 [-multiple] output standalone python lib files [-single] output one python file including lib contents (default)
 [-maxloop max_loop] max loop count while unroll loops, -1 default, means dont unroll an uncounted loops
 [-debug] debug mode
 [-src ] hlsl_file source hlsl/glsl file, -src can be omitted when file is the last argument

常见问题

  1. 翻译时提示全局变量向量化
    • 需要将全局变量修改为mainImage函数局部变量与其它使用变量的函数的inout参数
    • 修改相关函数调用加上对应全局变量的局部变量或参数变量
  2. 打开循环展开开关翻译时提示某个循环无法展开
    • 可以添加 -maxloop 64这样的命令行参数指定循环的最大次数
    • 可以修改循环为for(int i=0;i<64;++i)这样有明确次数的循环,原来的循环条件则变成一个if语句
    • 可以不理会,hlsl2numpy会按不展开的循环翻译运行
  3. 运行时提示有h_开头的函数未定义
    • 对numpy需要修改bin/Debug/shaderlib/hlsl_lib_numpy.py与bin/Debug/shaderlib/hlsl_lib_torch.py这2个库函数文件
    • 分别添加基于numpy与torch的api实现
    • 重新生成python代码
  4. 其它错误提示
    • 可能是实现bug

一些技术细节

Hlsl2Numpy实现笔记

测试用例列表

  1. 风暴

风暴

  1. 噪声FBM图

噪声FBM图

  1. 立方体里的雾

立方体里的雾

  1. SDF圆盘

SDF圆盘

  1. 雾中的小球

雾中的小球

  1. 荒漠风暴

荒漠风暴

  1. 小小的石头

小小的石头

  1. 旋转的球

旋转的球

  1. 化学立方体

化学立方体

  1. 云和山和海洋

云和山和海洋

  1. 高云之上

高云之上

  1. 绿地、树、水

绿地、树、水

  1. switch

switch

  1. 计数器版本一
  2. 计数器版本二

计数器

  1. 云中高塔

云中高塔

  1. 色块

色块

  1. 小小寰球

小小寰球

  1. 沙漠

沙漠

  1. 水晶

水晶

  1. SDF几何体

SDF几何体

  1. 简单体积云

简单体积云

  1. 穿过云层

穿过云层

  1. 哈利波特字幕

哈利波特字幕

  1. 穿过浓雾

穿过浓雾

  1. 秋月山谷

秋月山谷

  1. 蘑菇云

蘑菇云

  1. 跑步的人

跑步的人

  1. 找头的机器人

找头的机器人

  1. 跑步的机器人(骨骼动画)

跑步的机器人

  1. 平衡木上的火柴人

平衡木上的火柴人

  1. 变形人

变形人

  1. 桃花朵朵开

桃花朵朵开

  1. 海浪

海浪

  1. 黑色烟雾

黑色烟雾

  1. 熔岩

熔岩

  1. 万有引力

万有引力

  1. 水底礁石

水底礁石

  1. 飞翔的鸟

飞翔的鸟

  1. 花瓣与藤

花瓣与藤

  1. 流体

流体

  1. 棋盘与红酒

棋盘与红酒

  1. 机关小球

机关小球

  1. 陨石坠落

陨石坠落

  1. 分形

分形

  1. 孤独的机器人

孤独的机器人

  1. 贴地飞行

贴地飞行

  1. 湖光山色

湖光山色

  1. 眼睛与石化

眼睛与石化

  1. 三色烟雾

三色烟雾

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published