OSL
1,SimpleColorShader:
shader gamma(color cin = color(,,),output color Cout=color(,,))
{
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
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.-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(,,)[[string help="InputColor",float min = , float max = ]],output color Cout=color(,,))
{
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 =)
{
bsdf = diffuse_color * reflection(N);
}
diffuse(N):
5,Depth Color Channel:
#include <stdosl.h> shader GOSL_Metal(
float divide_value = ,
output color bsdf =[[float min=,float max=]])
{
point camera;
camera = transform("camera","world",point(,,));
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 = ;
vector sum=;
vector sample_p = (inputPos + offset) * freq;
float contrib = ;
for(int i=;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 = ,
float amplitude = ,
float roughness = 0.55,
int turbulence = ,
vector offset = ,
vector frequency = ,
int useRestNoise = ,
output color bsdf =)
{
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 = [[ string widget = "boolean" ]],
int enumvalue = [[ string widget = "popup", string options = "OptionA|OptionB|OptionC" ]],
output color cout=
)
{
if (booleanvalue)
cout=color(,,);
if (enumvalue == OPTION_B)
cout=color(,,);
}
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=
)
{ point Po = transform("object", P); point rbound[];
getattribute("geom:objbounds", rbound); point pmin = rbound[];
point pmax = rbound[]; float bx = fit(Po[],pmin[],pmax[],,);
float by = fit(Po[],pmin[],pmax[],,);
float bz = fit(Po[],pmin[],pmax[],,); 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
OSL的更多相关文章
- Major OSL changes to catch up
flat_map optimization for runtime specialization: https://github.com/imageworks/OpenShadingLanguage/ ...
- hibernate入门案例
最近准备学ssh,今天学了一下hibernate,用的是hibernate4,现在已经出5了:配置文件很容易写错,写配置文件的时候尽量复制. 需要的jar包如下:(jar包我是直接放在项目工程里面了, ...
- 在Linux环境下,将Solr部署到tomcat7中,导入Mysql数据库数据, 定时更新索引
什么是solr solr是基于Lucene的全文搜索服务器,对Lucene进行了扩展优化. 准备工作 首先,去下载以下软件包: JDK8:jdk-8u60-linux-x64.tar.gz TOMCA ...
- SQL Server 2008 R2——CROSS APPLY 根据数据出现的次数和时间来给新字段赋值
=================================版权声明================================= 版权声明:原创文章 禁止转载 请通过右侧公告中的“联系邮 ...
- BOOST.Asio——Tutorial
=================================版权声明================================= 版权声明:原创文章 谢绝转载 啥说的,鄙视那些无视版权随 ...
- uva 1354 Mobile Computing ——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5
- c++程序员必知的几个库
c++程序员必知的几个库 1.C++各大有名库的介绍——C++标准库 2.C++各大有名库的介绍——准标准库Boost 3.C++各大有名库的介绍——GUI 4.C++各大有名库的介绍——网络通信 5 ...
- Servlet高级
1. 获取初始化参数 在web.xml中配置Servlet时,可以配置一些初始化参数.而在Servlet中可以通过ServletConfig接口提供的方法来取得这些参数. index.jsp < ...
- OAF_文件系列10_实现OAF将数据资料导出Excel到本地JXL(案例)
20150729 Created By BaoXinjian
随机推荐
- nodejs部署方式-pm2
目前Nodejs开发中有很多痛点,其中有一个是修改完代码以后需要我们重启服务才能看到效果.这样一次次的杀进程.重启,杀进程.重启很让人头大.程序员是最痛恨重复工作的物种,之前有了解过的同学可能知道 f ...
- python总结 + 部署简单项目 到生产
-> filter过滤:list(filter(lambda x: x[0].find('tmp') == -1, table_temp_r)) -> 自定义map:def map_for ...
- js全角字符转为半角字符
//全角转半角 function CtoH(str){ var result=""; for (var i = 0; i < str.length; i++){ if (st ...
- 快速实现兼容的js复制方式。有点非正规,通过非正规的排版实现。
<div style="height:1px; width:1px; overflow:hidden; position:absolute;left:-2px;"> & ...
- Linux学习之路1
root用户 安装初始系统默认没有启动root用户,如下方式启动: l sudo passwd l 连续输入两次密码,启动root用户 l 再登陆 登陆root用户 l su root l ...
- Spring Boot 2.x 编写 RESTful API (三) 程序层次 & 数据传输
用Spring Boot编写RESTful API 学习笔记 程序的层次结构 相邻层级的数据传输 JavaBean 有一个 public 的无参构造方法 属性 private,且可以通过 get.se ...
- 您必须知道的 Git 分支开发规范
Git 是目前最流行的源代码管理工具. 为规范开发,保持代码提交记录以及 git 分支结构清晰,方便后续维护,现规范 git 的相关操作. 分支管理 分支命名 master 分支 master 为主分 ...
- nowcoder300J Mex
题目链接 题意 给出一个长度为\(n(n \le 10^5)\)序列,求其每个子序列之和所组成的集合的\(mex\) 思路 这么水的题都没想出来,感觉自己脑子瓦特了. 假设前\(i\)位可以组成区间\ ...
- (五) vivi代码分析
目录 vivi代码分析 初始化注册 使用open/read/ioctl 系统调用分析 ioctl流程一览 总结 title: vivi代码分析 date: 2019/4/23 19:30:00 toc ...
- js javascript 简易随机值穿插加解密【原】
适用场景 本方法适用于需要对敏感信息进行加密传输,但加解密要求又不高的场景,因为是前台的javascript加解密,所以其实还是能通过js代码分析出原始值来的. 如果您对信息极其敏感, 比例登录密码这 ...