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.代码

  1. Shader "Custom/NewShader" {
  2. Properties {
  3. _EmissiveColor("Emissive Color",Color)=(1,1,1,1)
  4. _AmbientColor("Ambient Color",Color)=(1,1,1,1)
  5. _MySliderValue("This is a Slider",Range(0,10))=2.5
  6. }
  7. SubShader {
  8. Tags { "RenderType"="Opaque" }
  9. LOD 200
  10.  
  11. CGPROGRAM
  12. #pragma surface surf BasicDiffuse
  13.  
  14. inline float4 LightingBasicDiffuse(SurfaceOutput s,fixed3 lightDir,fixed atten)
  15. {
  16. float difLight = max(0,dot(s.Normal,lightDir));
  17. float4 col;
  18. col.rgb = s.Albedo*_LightColor0.rgb*(difLight*atten*2);
  19. col.a = s.Alpha;
  20. return col;
  21. }
  22.  
  23. float4 _EmissiveColor;
  24. float4 _AmbientColor;
  25. float _MySliderValue;
  26.  
  27. struct Input {
  28. float2 uv_MainTex;
  29. };
  30.  
  31. void surf (Input IN, inout SurfaceOutput o) {
  32. float4 c;
  33. c = pow((_EmissiveColor+_AmbientColor),_MySliderValue);
  34.  
  35. o.Albedo = c.rgb;
  36. o.Alpha = c.a;
  37. }
  38. ENDCG
  39. }
  40. FallBack "Diffuse"
  41. }

  

 

5.学到什么

(1).正确设置自定义的light函数:

  1. #pragma surface surf BasicDiffuse //#pragma surface"将直接告诉Shader使用哪个光照模型用于计算

 然后定义Ligthing+编译的surf后函数名;

  1. 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里:

  1. // realtime lighting: call lighting function
  2. #ifdef LIGHTMAP_OFF
  3. c = LightingBasicDiffuse (o, _WorldSpaceLightPos0.xyz, atten);//自定义的light计算
  4. #endif // LIGHTMAP_OFF || DIRLIGHTMAP_OFF
  5. #ifdef LIGHTMAP_OFF
  6. c.rgb += o.Albedo * IN.vlight;//是否有vertexLight?有的话也添加计算
  7. #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传入的参数可以为scalarvector, 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的更多相关文章

  1. [转载]SharePoint 2013搜索学习笔记之自定义结果源

    搜索中心新建好之后在搜索结果页上会默认有所有内容,人员,对话,视频这四个结果分类,每个分类会返回指定范围的搜索结果,这里我再添加了部门日志结果分类,搜索这个分类只会返回部门日志内容类型的搜索结果,要实 ...

  2. Hadoop学习笔记—5.自定义类型处理手机上网日志

    转载自http://www.cnblogs.com/edisonchou/p/4288737.html Hadoop学习笔记—5.自定义类型处理手机上网日志 一.测试数据:手机上网日志 1.1 关于这 ...

  3. shiro学习笔记_0600_自定义realm实现授权

    博客shiro学习笔记_0400_自定义Realm实现身份认证 介绍了认证,这里介绍授权. 1,仅仅通过配置文件来指定权限不够灵活且不方便.在实际的应用中大多数情况下都是将用户信息,角色信息,权限信息 ...

  4. 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 ...

  5. SpringBoot学习笔记:自定义拦截器

    SpringBoot学习笔记:自定义拦截器 快速开始 拦截器类似于过滤器,但是拦截器提供更精细的的控制能力,它可以在一个请求过程中的两个节点进行拦截: 在请求发送到Controller之前 在响应发送 ...

  6. Vue笔记--通过自定义指令实现按钮操作权限

    经常做中后台系统,此类系统的权限是比较重要,拿自己做过的一些项目做个笔记. Vue实现的中后台管理系统.按钮操作权限的空置一般都是通过自定义指令Vue.directive. <el-button ...

  7. Spring Security笔记:自定义Login/Logout Filter、AuthenticationProvider、AuthenticationToken

    在前面的学习中,配置文件中的<http>...</http>都是采用的auto-config="true"这种自动配置模式,根据Spring Securit ...

  8. Spring Security笔记:自定义登录页

    以下内容参考了 http://www.mkyong.com/spring-security/spring-security-form-login-example/ 接上回,在前面的Hello Worl ...

  9. CSS学习笔记----CSS3自定义字体图标

    响应式网页字体图标 作者:大漠 日期:2014-01-28 点击:3220 @font-face Responsive 本文由大漠根据Jason的<Responsive Webfont Icon ...

随机推荐

  1. javascript 函数初探 (六)--- 闭包初探#1

    首先我们来看一个函数: var a = 'global variable'; var F = function(){ var b = 'local variable'; var N = functio ...

  2. GPS坐标互转:WGS-84(GPS)、GCJ-02(Google地图)、BD-09(百度地图)(转载)

    WGS-84:是国际标准,GPS坐标(Google Earth使用.或者GPS模块)GCJ-02:中国坐标偏移标准,Google Map.高德.腾讯使用BD-09:百度坐标偏移标准,Baidu Map ...

  3. 将Win10变回Win7/WinXP界面

    前往 Classic Shell 的网站(传送门:http://www.classicshell.net/)进行下载安装.第一次开启 时,程序会让你选择一款面板:第一个是 Windows 2000 的 ...

  4. 渗透测试报告收集、生成工具MagicTree

    0x00 软件介绍: MagicTree是Gremwell开发的一个Java程序,支持主动收集数据和生成报告的工具.他通过树形结构节点来管理数据,这种分层存储的方法对管理主机和网络数据特别有效. 其分 ...

  5. xmpp整理笔记:发送图片信息和声音信息

    图片和音频文件发送的基本思路就是: 先将图片转化成二进制文件,然后将二进制文件进行base64编码,编码后成字符串.在即将发送的message内添加一个子节点,节点的stringValue(节点的值) ...

  6. Android+PHP服务器+MySQL实现安卓端的登录

    时隔已久的一个任务,今天终于可以画上一个句号了.心情是万分的激动,虽然这份小成就来的有点迟但还是按捺不住心情的澎湃.下面我就先上几张图片来展示一下我的成绩 android源代码: 首先最重要的一件事是 ...

  7. Android NDK之JNI陷阱

    背景: 最近一个月一直在做移植库的工作,将c代码到share library移植到Android平台.这就涉及到Android NDK(native develop kit)内容.这里只想记录下JNI ...

  8. 截取UIImage指定大小区域

    截取UIImage指定大小区域 最近遇到这样的需求:从服务器获取到一张照片,只需要显示他的左半部分,或者中间部分等等.也就是截取UIImage指定大小区域. UIImage扩展 我的解决方案是对UII ...

  9. js去掉字符串前后空格的五种方法

    转载 :http://www.2cto.com/kf/201204/125943.html 第一种:循环检查替换[javascript]//供使用者调用  function trim(s){  ret ...

  10. 1.7 基础知识——GP2.6 配置管理(CM)

    摘要: 某某工作产品要进行配置管理,并不意味非要进行很重型的配置管理,根据实际需要采取合适的方式就可以了. 正文: GP2.6 Place designed work products of XXX ...