OSL
1,SimpleColorShader:
shader gamma(color cin = color(0,0,0),output color Cout=color(0,0,0)) { Cout = cin; }
Katana启动时候会自动编译:
Arnold里bin文件夹里有oslc编译osl文件。但是在centos的GLIB不是2.14,所以单独运行不行。 但是在Katana启动调用时候为何自动编译,猜测是Arnold bin文件夹里已经把GLIB2.14一些符号编译成静态库了。
如果需要手动编译osl.编译GLIBC2.14.
编译glibc2.14 放到/opt/glibc-2.14
cd build ../configure --prefix=/opt/glibc-2.14 make -j 56 make install #如果编译错误: cp /etc/ld.so.conf /opt/glibc-2.14/etc/
再创建个bash文件调用GLIBC2.14,然后执行oslc,起名为:run_oslc
#!/usr/bin/env bash GLIB_LIB_PATH=/opt/glibc-2.14/lib KTOA_ROOT=/opt/solidangle/KtoA-2.2.0.2-kat3.0-linux/ export LD_LIBRARY_PATH=${GLIB_LIB_PATH}:${LD_LIBRARY_PATH} exec "${KTOA_ROOT}/bin/oslc" "$@"
则编译shader是:./run_oslc gamma.osl
Katana要加载osl shader 必须:export ARNOLD_PLUGIN_PATH=/mnt/Proj_Lighting/RD/katana3_plugin/Arnold/OSL_Shaders 要指定这个环境变量,
把shader放到这个里面,Katana会自动编译这些oslshader, 不用自己去手动编译
2,添加辅助信息 :
shader gamma[[ string help = "Simple mat" ]] (color cin = color(0,0,0)[[string help="InputColor",float min = 0, float max = 1]],output color Cout=color(0,0,0)) { Cout = cin; }
3,Diffuse with noise
#include <stdosl.h> shader SimpleShader( color diffuse_color = color(0.6, 0.8, 0.6), float noise_factor = 0.5, output closure color bsdf = diffuse(N)) { color material_color = diffuse_color * mix(1.0, noise(P * 10.0), noise_factor); bsdf = material_color * diffuse(N); }
bsdf默认是个diffuse材质,下面只是乘以一些颜色
4,Metal Reflection
#include <stdosl.h> shader GOSL_Metal( color diffuse_color = color(0.6, 0.8, 0.6), output closure color bsdf =0) { bsdf = diffuse_color * reflection(N); }
diffuse(N):
5,Depth Color Channel:
#include <stdosl.h> shader GOSL_Metal( float divide_value = 10, output color bsdf =0[[float min=0,float max=1000000000]]) { point camera; camera = transform("camera","world",point(0,0,0)); bsdf = sqrt(dot(camera-P,camera-P))/divide_value; }
6,Noise shader:
#include <stdosl.h> /* Coding Time:2018/9/10 liuyangping207@qq.com */ vector getNoise(vector inputPos,float amp,vector offset,vector freq,int turbulence, float rough){ vector fp = 0; vector sum=0; vector sample_p = (inputPos + offset) * freq; float contrib = 1; for(int i=0;i<turbulence;i++) { vector ns = snoise(sample_p); sum += ns*contrib; sample_p *=2.6; contrib *= rough; } fp += sum*amp; return fp; } shader GOSL_Metal( vector inputPosition = 0, float amplitude = 1, float roughness = 0.55, int turbulence = 5, vector offset = 0, vector frequency = 1, int useRestNoise = 0, output color bsdf =0) { if(useRestNoise) bsdf = getNoise(inputPosition,amplitude,offset,frequency,turbulence,roughness); else{ bsdf = getNoise(P,amplitude,offset,frequency,turbulence,roughness); } }
7,metadata in katana
#include <stdosl.h> /* Coding Time:2018/9/10 liuyangping207@qq.com */ #define OPTION_A 0 #define OPTION_B 1 #define OPTION_C 2 shader TestCode( int booleanvalue = 0 [[ string widget = "boolean" ]], int enumvalue = 0 [[ string widget = "popup", string options = "OptionA|OptionB|OptionC" ]], output color cout=0 ) { if (booleanvalue) cout=color(1,0,0); if (enumvalue == OPTION_B) cout=color(0,1,0); }
8,Bounding obj color:
#include <stdosl.h> /* Coding Time:2018/9/10 liuyangping207@qq.com */ int zero_compare(float a ) { return a >= -0.00001 && a <= 0.00001; } float fit(float var, float omin, float omax, float nmin, float nmax) { float d = omax - omin; if (zero_compare(d)) { return (nmin + nmax) * 0.5; } if (omin < omax) { if (var < omin) return nmin; if (var > omax) return nmax; } else { if (var < omax) return nmax; if (var > omin) return nmin; } return nmin + (nmax - nmin) * (var - omin) / d; } shader TestCode( output color cout=0 ) { point Po = transform("object", P); point rbound[2]; getattribute("geom:objbounds", rbound); point pmin = rbound[0]; point pmax = rbound[1]; float bx = fit(Po[0],pmin[0],pmax[0],0,1); float by = fit(Po[1],pmin[1],pmax[1],0,1); float bz = fit(Po[2],pmin[2],pmax[2],0,1); cout = color(bx,by,bz); }
9,Fake Caustic In Katana
新项目要用焦散. OSL这个时候快速派上用场。思维就是在灯光上用gobo投射UV Caustic, 顺便也做了个三维的,因为在三维就是x,y,z, uv的就是u,v,0
10,Gradient Voronoise
If F(x,y,z) =
WIKI Tell us :
So GradF will display this picture.
Display the Grad vector:
REF:
https://blog.csdn.net/clirus/article/details/62425498
https://answers.arnoldrenderer.com/questions/489/how-to-setup-osl-shader.html
http://thhube.github.io/tutorials/osl/osl.html
https://docs.arnoldrenderer.com/display/A5ARP/OSL+Shaders
https://blog.selfshadow.com/publications/s2012-shading-course/martinez/s2012_pbs_osl_notes_v3.pdf
posted on 2018-10-09 11:23 gearslogy 阅读(1805) 评论(0) 编辑 收藏 举报