最近在学习ue和unity的shader,看到 B站Emoter_森羅的shader教程
讲解的是原作品 Cyber Fuji 2020 (赛博富士2020) created by: kaiware007
我就想着到houdini里也做一遍,发现怎么做都不一样,shader也没法很直接的调试,只能注释着排除,直接说结论:houdini的vex函数smooth与glsl的smoothstep其实并不完全一样。
测试步骤
houdini测试uv
vector2 resolution = set(chi("../grid1/sizex"),chi("../grid1/sizey"));
vector2 fragcoord = set(@primnum%resolution.x,int(resolution.y-@primnum/resolution.x));
float Time = @Time;
vector4 fragColor;
/*actually work*/
vector2 uv = (2.0 * fragcoord - resolution)/min(resolution.x,resolution.y);
vector col = set(uv.x,uv.y,0);
/*actually work*/
fragColor = col;
setprimattrib(0,"Cd", @primnum,fragColor);
shadertoy测试uv
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 uv = (2.0 * fragCoord.xy - iResolution.xy)/min(iResolution.x,iResolution.y);
vec3 col = vec3(uv, 0.0);
fragColor = vec4(col,1.0);
}
可知基础环境应该是没有问题的
houdini测试smooth
注意smooth中前两个参数为0.3,0.29
由于只是把1里的smooth这一行改一下,其他内容不变,就不写上来了
vector2 resolution = set(chi("../grid1/sizex"),chi("../grid1/sizey"));
vector2 fragcoord = set(@primnum%resolution.x,int(resolution.y-@primnum/resolution.x));
float Time = @Time;
vector4 fragColor;
/*actually work*/
vector2 uv = (2.0 * fragcoord - resolution)/min(resolution.x,resolution.y);
float val = smooth(3, 029, length(uv));
vector col = set(val,0,0);
/*actually work*/
fragColor = col;
setprimattrib(0,"Cd", @primnum,fragColor);
shadertoy测试smoothstep 2
注意smoothstep中前两个参数为0.3,0.29
由于只是把1里的smoothstep这一行改一下,其他内容不变,就不写上来了
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 uv = (2.0 * fragCoord.xy - iResolution.xy)/min(iResolution.x,iResolution.y);
float val = smoothstep(0.3, 0.29, length(uv));
vec3 col = vec3(val, 0.0, 0.0);
fragColor = vec4(col,1.0);
}
到这里才发现两者不同,也就是,只有前参数大于后参数时,才产生区别。
解决办法
解决办法当然是传统艺能,重写一个smooth了。直接在vex中自定义一个function也可以,例如
function float shader_vex_smoothstep(float edge0;float edge1;float x)
{
float t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);
return t * t * (3.0 - 2.0 * t);
}
但我还是选择在HDK中实现,使用template可以方便以后的扩展。目前不需要,就不做了。
关于Houdini HDK的内容可能会在后续文章中讲解。HDK制作SOP与VEX是比较常见的。目前已经写了几篇了,是
b站视频中HDK内容的 ! 业余 ! 分析,视频内容本身也很业余,以整活和useless为主,所以我也只能业余分析。 问:为什么不直接录视频顺便讲了呢?答:因为我不知道说啥,容易说的很乱
最终效果
shadertoy效果
houdini效果
又水了一篇useless文章