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

Posted 白昼梦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[简单教程]在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选项,渲染一帧看看
技术分享
这是我的渲染效果,你呢?(笑)
技术分享

以上是关于[简单教程]在blender里编写自己的着色器的主要内容,如果未能解决你的问题,请参考以下文章

「游戏引擎 浅入浅出」4.3 片段着色器

「游戏引擎 浅入浅出」4.3 片段着色器

「游戏引擎 浅入浅出」4.3 片段着色器

「游戏引擎 浅入浅出」4.3 片段着色器

DirectX11--HLSL语法入门

如何在渲染之间更改片段着色器颜色?