[簡單教程]在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選項,渲染一幀看看
這是我的渲染效果,你呢?(笑)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM