我的个人网站: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选项,渲染一帧看看
这是我的渲染效果,你呢?(笑)
时间: 2024-10-06 03:46:29