1.前面的心情

每次写博客,先写心情也好,就当是小日记了吧。现在已经懒到不想动笔和纸来写日记了。近两天公司的活较少,晚上直接回来了,没有留公司。在公司看代码,不做工,就困...

哎,小辉哥家的老房子后天要拆了,时间过的真快啊,想起小时候去他家玩,鞭炮,烟花,和大辉哥一起,我们三个,快乐的吹牛快乐的小人书电视;哎时光不再,timefly...如今他孩子都多大了...

2.参考内容:

老样子,书和妹子的博客

3.主要实现:

主要是rampTexture的数据加载。

使用rampTexture:

得到结果:

4.代码

我主要关注rampTexture的读取,光照数据直接忽略掉。即surf里,传入lightingBasicDiffuse接口之前,直接使用(1,1,1,1)

Shader "Custom/NewShader" {
Properties {
_RampTex("Ramp Texutre",2D)="white"{}
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200 CGPROGRAM
#pragma surface surf BasicDiffuse
sampler2D _RampTex; struct Input {
float2 uv_MainTex;
}; void surf (Input IN, inout SurfaceOutput o) {
float4 c;
c = float4(1,1,1,1);//直接置1
o.Albedo = c.rgb;
o.Alpha = c.a;
} inline float4 LightingBasicDiffuse(SurfaceOutput s,fixed3 lightDir,fixed atten)
{
float difLight = max(0,dot(s.Normal,lightDir));
float3 rampColor = tex2D(_RampTex,float2(difLight,difLight)).rgb;//**纹理采样**
float4 col;
col.rgb = (rampColor);//**直接上texture数据**
col.a = s.Alpha;
return col;
} ENDCG
}
FallBack "Diffuse"
} 

5.我学到什么

(1).简单数学曲线的分析,以及绘制:

例子中halfLambert:dot后的数据A,A*0.5+0.5的曲线:https://developer.valvesoftware.com/wiki/Half_Lambert

(2)u3d纹理模式的分析:

现象,和lightDir为0的顶点显示为棕色:

首先设置了Directional Light

a.如上图问题;当设置Repeat,并用线性插值会出现这种问题;不管是二次还是三次线性插值。   

float difLight = max(0.001,dot(s.Normal,lightDir));颜色逐渐趋近红色

原因:边缘插值,可能边缘数据0左侧为空数据,导致了和red中和的数据为0,哎,也是猜测的,但应该如此

当纹理寻址模式为Clamp,直接使用边缘数据,则不会出现这种问题。

u3d_Shader_effects笔记3 half diffuse 和 ramp texture的更多相关文章

  1. 【Unity Shaders】Diffuse Shading——使用2D ramp texture来创建一个假的BRDF(双向反射分布函数)

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

  2. u3d_Shader_effects笔记5 第二章 通过UV,进行纹理移动

    1.前面心情 公司最近打包,像我等小弟闲着,看代码容易困,没事偷着学shader,不过还是要多交流才行. 2.本文参考 这次参考比较多:由texture uv延伸问题多,主要是不明白变量定义: htt ...

  3. u3d_Shader_effects笔记6 第二章 animating sprite

    1.前面的心情 上班看shader我也是醉了.写完这篇看代码去了,不过看着看着恐怕就会困.... 还有就是上天,我该怎么做,下一步,大懒: 2.参考源头 http://blog.csdn.net/ca ...

  4. u3d_Shader_effects笔记4 BRDF

    1.英文意思 bidirectional reflectance distribution function bidirectional :双向的 reflectance :反射 distributi ...

  5. u3d_Shader_effects笔记2 自定义surfaceDiffuseLight

    1.前面的心情 今晚7点半睡着后,9点半左右被吵醒.醒来后非常失落,感觉人生到底在追求什么,我又在追求什么.昨晚梦到妈妈了.最近不时会想到爷爷的去世.人世的险恶,良心的缺失.不过一切总要向前看,至少我 ...

  6. u3d_Shader_effects笔记6 第四章 使用cubeMap简单的反射读取

    一:前面心情: 1.今天开了个小会,该看的继续要看,不要堕落. 2.还有就是丽的生活习惯不太好.慢慢改变. 3.哎,公司人员争夺吗?哎,不知道,不了解,不去想,提升自己,内心明净 二.主要内容和参考 ...

  7. 【Unity Shaders】学习笔记——SurfaceShader(四)用纹理改善漫反射

    [Unity Shaders]学习笔记——SurfaceShader(四)用纹理改善漫反射 转载请注明出处:http://www.cnblogs.com/-867259206/p/5603368.ht ...

  8. 【Unity Shaders】Diffuse Shading——漫反射光照改善技巧

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

  9. 【Unity Shaders】概述及Diffuse Shading介绍

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

随机推荐

  1. 一次简单的分析手机APK病毒木马

    写个笔记记录一下,起因是朋友在QQ上发了个连接叫我看看 安不安全,叫我帮他看看,反正在店里待着也没生意,那就顺便看看咯. 打开这个网址  会自动弹出下载一个名为OOXX的APK安装包. 起先我的思路是 ...

  2. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q59-Q62)

    Question 59You are designing a collection of Web Parts that will be packaged into a SharePoint 2010 ...

  3. Android NDK之JNI陷阱

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

  4. Xcode 7中http通信出现如下错误:Application Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.

    原因 在iOS9 beta1中,苹果将原http协议改成了https协议,使用 TLS1.2 SSL加密请求数据. 解决方法 编辑 info.plist,加入如下设置: <plist> & ...

  5. 约瑟夫环问题分析-C语言经典面试题

    好久没有看有关算法的问题了,今天废了不少劲,再感叹一句:要想学好算法就要常练习,没什么捷径可走.废话不多说,如下: 问题描述:有m个人,围成一个环,编号为 0.1.2.3...m-1,从第一个人开始循 ...

  6. iOS开发之AFN的基本使用

    本篇将从四个方面对iOS开发中经常使用到的AFNetworking框架进行讲解: 一.什么是 AFN 二.为什么要使用 AFN 三.AFN 怎么用 三.AFN和ASI的区别 一.什么是 AFN AFN ...

  7. python里面出现中文的时候报错 'ascii' codec can't encode characters in position

    编码问题,在头部添加 import sys reload(sys) sys.setdefaultencoding( "utf-8" ) http://www.xuebuyuan.c ...

  8. android双击返回键退出程序的实现

    /** * 菜单.返回键响应 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-gen ...

  9. 看看Parallel中高度封装的三个方法,Invoke,For和ForEach

    说到.net中的并行编程,也许你的第一反应就是Task,确实Task是一个非常灵活的用于并行编程的一个专用类,不可否认越灵活的东西用起来就越 复杂,高度封装的东西用起来很简单,但是缺失了灵活性,这篇我 ...

  10. 记一次使用openrowset 的坑

    前几天被老大训斥连openrowset 都不会用,然后我就去看了文档,想测试一下栗子~ openrowset 的具体语法我就不贴了,戳这里:https://msdn.microsoft.com/zh- ...