u3d_Shader_effects笔记2 自定义surfaceDiffuseLight
1.前面的心情
今晚7点半睡着后,9点半左右被吵醒。醒来后非常失落,感觉人生到底在追求什么,我又在追求什么。昨晚梦到妈妈了。最近不时会想到爷爷的去世。人世的险恶,良心的缺失。不过一切总要向前看,至少我有一个快乐幸福的家庭。有支持我的父母姐妹。
但自己到底想要什么,追求什么。
近期工作也不太顺利,业余时间也比较堕落。
感情方面还是空白,而且经常想性事。
不管怎样,为了活着的人和自己,每天都要开心、进步、阳光。
2.本文主要内容
本文主要是18页到20页内容。 自定义diffuse光照处理。
3.参考内容:
(1)书
(2)参照中文,速度看看整个流程; http://blog.csdn.net/candycat1992/article/details/17440101
(3)查看shader内置函数:http://www.cnblogs.com/rainstorm/archive/2013/05/04/3057444.html
微软官网也有:https://msdn.microsoft.com/en-us/library/windows/desktop/ff471376(v=vs.85).aspx
4.代码
Shader "Custom/NewShader" {
Properties {
_EmissiveColor("Emissive Color",Color)=(1,1,1,1)
_AmbientColor("Ambient Color",Color)=(1,1,1,1)
_MySliderValue("This is a Slider",Range(0,10))=2.5
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200 CGPROGRAM
#pragma surface surf BasicDiffuse inline float4 LightingBasicDiffuse(SurfaceOutput s,fixed3 lightDir,fixed atten)
{
float difLight = max(0,dot(s.Normal,lightDir));
float4 col;
col.rgb = s.Albedo*_LightColor0.rgb*(difLight*atten*2);
col.a = s.Alpha;
return col;
} float4 _EmissiveColor;
float4 _AmbientColor;
float _MySliderValue; struct Input {
float2 uv_MainTex;
}; void surf (Input IN, inout SurfaceOutput o) {
float4 c;
c = pow((_EmissiveColor+_AmbientColor),_MySliderValue); o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
5.学到什么
(1).正确设置自定义的light函数:
#pragma surface surf BasicDiffuse //#pragma surface"将直接告诉Shader使用哪个光照模型用于计算
然后定义Ligthing+编译的surf后函数名;
inline float4 LightingBasicDiffuse(SurfaceOutput s,fixed3 lightDir,fixed atten)//
(2).surface shader下三种类型的lighting mode可以使用:
主要区分点:1.是否延迟light(此不熟悉) 2.是否和viewDir有关(上篇讲的光源种类,specular和viewDir相关)
(3)基本的光照公式:
即 dot vertexNormal和ligthDir;然后加个atten;
(4)此diffuseLight计算处于的渲染阶段:
首先show generated coder,找lightingBasicDiffuse():
在 fragment shader里:
// realtime lighting: call lighting function
#ifdef LIGHTMAP_OFF
c = LightingBasicDiffuse (o, _WorldSpaceLightPos0.xyz, atten);//自定义的light计算
#endif // LIGHTMAP_OFF || DIRLIGHTMAP_OFF
#ifdef LIGHTMAP_OFF
c.rgb += o.Albedo * IN.vlight;//是否有vertexLight?有的话也添加计算
#endif // LIGHTMAP_OFF
即本文lightDiffuse是在片元shader里进行的,像素级的light计算
(5)用到的内置函数
1.dot , Returns the dot product of two vectors.
2.max ,Selects the greater of x and y.
书中提到saturate:Clamps x to the range [0, 1]
注意max和saturate传入的参数可以为scalar, vector, or matrix;
3.step;是避免if...else的一种方式!
6.疑问,待学习
1.max 和saturate防止负值用哪个比较好?
更新:据群里bluebit大神言,如我没理解错,当saturate和dot结合使用时,会编译成一条指令,效率高;其他情况使用max...
2.deferred概念不清楚
3.第5节(2)中三种光照模式没找到在哪里定义的。。.\Editor\Data\CGIncludes没找到设定
u3d_Shader_effects笔记2 自定义surfaceDiffuseLight的更多相关文章
- [转载]SharePoint 2013搜索学习笔记之自定义结果源
搜索中心新建好之后在搜索结果页上会默认有所有内容,人员,对话,视频这四个结果分类,每个分类会返回指定范围的搜索结果,这里我再添加了部门日志结果分类,搜索这个分类只会返回部门日志内容类型的搜索结果,要实 ...
- Hadoop学习笔记—5.自定义类型处理手机上网日志
转载自http://www.cnblogs.com/edisonchou/p/4288737.html Hadoop学习笔记—5.自定义类型处理手机上网日志 一.测试数据:手机上网日志 1.1 关于这 ...
- shiro学习笔记_0600_自定义realm实现授权
博客shiro学习笔记_0400_自定义Realm实现身份认证 介绍了认证,这里介绍授权. 1,仅仅通过配置文件来指定权限不够灵活且不方便.在实际的应用中大多数情况下都是将用户信息,角色信息,权限信息 ...
- ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则
ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...
- SpringBoot学习笔记:自定义拦截器
SpringBoot学习笔记:自定义拦截器 快速开始 拦截器类似于过滤器,但是拦截器提供更精细的的控制能力,它可以在一个请求过程中的两个节点进行拦截: 在请求发送到Controller之前 在响应发送 ...
- Vue笔记--通过自定义指令实现按钮操作权限
经常做中后台系统,此类系统的权限是比较重要,拿自己做过的一些项目做个笔记. Vue实现的中后台管理系统.按钮操作权限的空置一般都是通过自定义指令Vue.directive. <el-button ...
- Spring Security笔记:自定义Login/Logout Filter、AuthenticationProvider、AuthenticationToken
在前面的学习中,配置文件中的<http>...</http>都是采用的auto-config="true"这种自动配置模式,根据Spring Securit ...
- Spring Security笔记:自定义登录页
以下内容参考了 http://www.mkyong.com/spring-security/spring-security-form-login-example/ 接上回,在前面的Hello Worl ...
- CSS学习笔记----CSS3自定义字体图标
响应式网页字体图标 作者:大漠 日期:2014-01-28 点击:3220 @font-face Responsive 本文由大漠根据Jason的<Responsive Webfont Icon ...
随机推荐
- 网页引用本地电脑的字体 css设置浏览器会不显示的解决办法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Flex Viewer
一.Flex Viewer简介 Flex Viewer是ESRI公司推出的可以高效开发基于WEB的地理信息应用系统的一种完全免费的应用程序框架.业务人员使用该框架可以无需任何额外的编程就能够通过简单配 ...
- Get item by sharepoint web service jquery
对于sp2010,在ie浏览器中这个代码无法生效,只有chrome可以生效. //获取附件id function GetAttachments(listName) { var soapEnv = '& ...
- Atitit.iso格式蓝光 BDMV 结构说明
Atitit.iso格式蓝光 BDMV 结构说明 1. Iso是个复合文件1 2. Iso内部格式如下1 2.1. Bdmv文件夹格式 BDMV(Blu-ray Disk Movie.BD-MV),为 ...
- JavaScript学习04 对象
JavaScript学习04 对象 默认对象 日期对象Date, 格式:日期对象名称=new Date([日期参数]) 日期参数: 1.省略(最常用): 2.英文-数值格式:月 日,公元年 [时:分: ...
- 把应用push到/system/app上面后,出现java.lang.UnsatisfiedLinkError的问题
把应用push到/system/app下面后,加载.so库的问题 01-01 00:07:08.186: E/MessageQueue-JNI(2683): java.lang.Unsatisfied ...
- OBST(Optimal Binary Tree最优二叉搜索树)
二叉搜索树 二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的 ...
- Eclipse界面设置与常用技巧
建议使用的透视图--视窗组合 Window→Save perspective as 保存当前透视图设置,便于将来不小心打乱后恢复 恢复的方法:Window→reset perspective 定制 ...
- android Gui系统之SurfaceFlinger(1)---SurfaceFlinger概论
GUI 是任何系统都很重要的一块. android GUI大体分为4大块. 1)SurfaceFlinger 2)WMS 3)View机制 4)InputMethod 这块内容非常之多,但是理解后,可 ...
- asp.net mvc 之旅—— 第一站 从简单的razor入手
记得2011年mvc3刚出来的时候,我们就有幸将 mvc3 用在我们团购项目上,当时老大让我们用一个星期时间来熟悉mvc,幸好园子里面的老朋友DR 正在写mvc3系列,也恭喜这个系列文章被整理成专题供 ...