我的個人網站: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選項,渲染一幀看看

這是我的渲染效果,你呢?(笑)
