[简单教程]在blender里编写自己的着色器

我的个人网站:www.bladesero.win

 

配置环境:win 10+blender 2.77a

博主最近学了一些shader编程,现在想到blender里面简单实践一下

 
首先我们进入文本编辑器,新建一个empty shader的模板
 
一个基本的OSL程序可以分为3块:输入变量,输出变量和程序主体的代码块
 
 
另外,OSL支持3个shader语言所特有的变量:normal,color,matrix
 
好了,对OSL大致的描述到此为止
 
接下来,我想做一个有漫反射和高光的表面表面着色器,所以要用到以下两个函数
:diffuse()和phong_ramp()
要注意一下的是,blender里所能使用的函数和OSL语言规范里的有些不同,最好是以blender的Wiki为准:https://docs.blender.org/manual/en/dev/render/cycles/nodes/introduction.html#open-shading-language
 
懒得码字了。。下面我就直接放出代码了
 
 
 1 shader test(float Kd=1,
 2 float Exponent = 10.0,
 3 color Col=1,
 4 color Color1 = color(0.8, 0.0, 0.0),
 5     color Color2 = color(0.0, 0.8, 0.0),
 6     color Color3 = color(0.0, 0.0, 0.8),
 7     color Color4 = 0.1,
 8     color Color5 = 0.2,
 9     color Color6 = 0.3,
10     color Color7 = 0.4,
11     color Color8 = 0.5,
12 normal Normal=N,
13 output closure color Phong = 0,//冯氏光照模型
14 output closure color Diffuse=0//漫反射光照模型)
15 {
16   color Color[8] = {Color1, Color2, Color3, Color4, Color5, Color6, Color7, Color8};
17   Diffuse = Kd*Col*diffuse(Normal);
18   Phong=phong_ramp(Normal,Exponent,Color);
19 }

 

 
博主最近要考试,下次我再讲讲光照模型的原理和算法
 
然后我们使用cycles渲染,再切换到节点编辑器,添加->脚本
我调整了一下颜色,你也可以试试各种配色,看看有什么不同的效果
最后我们勾上OSL选项,渲染一帧看看
这是我的渲染效果,你呢?(笑)
posted @ 2017-05-14 17:43  白昼梦  阅读(5876)  评论(0编辑  收藏  举报