[简单教程]在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选项,渲染一帧看看

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

时间: 2024-10-06 03:46:29

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

WPF 像素着色器入门:使用 Shazzam Shader Editor 编写 HLSL 像素着色器代码

原文:WPF 像素着色器入门:使用 Shazzam Shader Editor 编写 HLSL 像素着色器代码 HLSL,High Level Shader Language,高级着色器语言,是 Direct3D 着色器模型所必须的语言.WPF 支持 Direct3D 9,也支持使用 HLSL 来编写着色器.你可以使用任何一款编辑器来编写 HLSL,但 Shazzam Shader Editor 则是专门为 WPF 实现像素着色器而设计的一款编辑器,使用它来编写像素着色器,可以省去像素着色器接入

编写Unity3D着色器的三种方式

不管你会不会写Unity3D的shader,估计你会知道,Unity3D编写shader有三种方式,这篇东西主要就是说一下这三种东西有什么区别,和大概是怎样用的. 先来列一下这三种方式: fixed function shader vertex and fragment shader surface shader 为什么Unity3D要提供三种shader的编写方式呢?那是因为三种方式的编写的难易度有区别,对应着不同的使用人群.其实我觉得这是Uniy3D想得有点多了,着色器不单止是为了实现效果,

[简明python教程]学习笔记之编写简单备份脚本

[[email protected] 0503]# cat backup_ver3.py #!/usr/bin/python #filename:backup_ver3.py import os import time #source source=['/root/a.sh','/root/b.sh','/root/c.sh'] #source='/root/c.sh' #backup dir target_dir='/tmp/' today=target_dir+time.strftime('

(译)Windsor入门教程---第三部分 编写第一个Installer

简介 在第二部分我们创建了控制器工厂.现在我们要把我们的控制器交给Windsor来管理. Installer Windsor有一个专门的类installer.cs,用来向容器注册组件.在你的应用程序中至少会有几个这样的installer类,所以要保持他们的代码整洁以及可见性.接下来在我们的应用程序中新建一个专门的文件夹"Installer"来存放这些类.我们首先要注册到容器中的就是控制器,所以我们先来新建一个ControllersInstaller.cs类. Controller in

Delphi : 自动升级组件AutoUpgrader简单教程(初学者)

AutoUpgrader简单教程(写给初学者) 1.放置一个TauAutoUpgrader在窗体上 2.双击auAutoUpgrader1,在弹出的对话框中设定一些要件: 首先选择按日期还是按版本号检查更新并填好日期或版本号(该日期或版本号也可以在会同时记录在VersionData属性里,版本号主要通过该属性来检查),然后单击add按钮添加需要更新的文件的http下载地址,因AutoUpgrader仅支持http方式,不支持ft方式,所以不要填错.Upgrade method默认即可:然后在“R

FusionCharts简单教程(一)---建立第一个FusionCharts图形

因为项目需求须要做一个报表,选择FusionCharts作为工具使用.因为曾经没有接触过报表,网上也没有比較具体的fusionCharts教程,所以决定好好研究FusionCharts,同一时候做一个比較简单的教程提供參考.因为能力有限(应届毕业生的菜鸟而已),所以教程(学习笔记而已)不免会有错误,望别喷,望指正.当然肯定避免不了会參考其它资料的. 一.FusionCharts简单介绍和安装使用 1.1.简单介绍 FusionCharts是InfoSoft Global公司的一个产品,而Fusi

WCF入门简单教程(图文) VS2010版

在这个例子中我们将使用VS 2010 创建一个WCF服务,其中会了解 [DataContract] [ServiceContract] 等特性.  内置的 WCFSVCHost ,并使用"WCF测试客户端"来测试我们创建的服务. 注意下面的所有类.接口及方法都添加了public 的访问级别. 一,建立一个WCF服务库 创建一个WCF服务库项目 在解决方案中会自动为我们生成两个类文件"IService1.cs"和"Service1.cs". 这两个

PowerDNS简单教程(3):管理篇

目录: PowerDNS简单教程(1):安装篇 PowerDNS简单教程(2):功能篇 PowerDNS简单教程(3):管理篇(本篇) PowerDNS简单教程(4):优化篇 说到管理,其实是对于PowerDNS的管理.我们可以通过Poweradmin来管理 PowerDNS.我参考了这个网页 http://www.unixmen.com/install-poweradmin-a-web-based-control-panel-for-powerdns-in-linux/ 来安装 Powerad

PowerDNS简单教程(1):安装篇

这一篇开始直接是PowerDNS教程,连续四篇.DNS的相关背景知识我就不介绍了,有需要的话看看 http://baike.baidu.com/link?url=QcthFpAb2QydMqcMJr9qnxjfAKKkncDG1IL6IJkfwK85N8OXXC2u2hzbuGQlRDxLU-LwzPy967ODIoL37zoqcTL8_yJEyt_2hRJIhc5oBjC 或自行百度. 目录: PowerDNS简单教程(1):安装篇(本篇) PowerDNS简单教程(2):功能篇 PowerD