标签:
今晚7点半睡着后,9点半左右被吵醒。醒来后非常失落,感觉人生到底在追求什么,我又在追求什么。昨晚梦到妈妈了。最近不时会想到爷爷的去世。人世的险恶,良心的缺失。不过一切总要向前看,至少我有一个快乐幸福的家庭。有支持我的父母姐妹。
但自己到底想要什么,追求什么。
近期工作也不太顺利,业余时间也比较堕落。
感情方面还是空白,而且经常想性事。
不管怎样,为了活着的人和自己,每天都要开心、进步、阳光。
本文主要是18页到20页内容。 自定义diffuse光照处理。
(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
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" }
#pragma surface surf BasicDiffuse //#pragma surface"将直接告诉Shader使用哪个光照模型用于计算
然后定义Ligthing+编译的surf后函数名;
inline float4 LightingBasicDiffuse(SurfaceOutput s,fixed3 lightDir,fixed atten)//
主要区分点:1.是否延迟light(此不熟悉) 2.是否和viewDir有关(上篇讲的光源种类,specular和viewDir相关)
即 dot vertexNormal和ligthDir;然后加个atten;
首先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计算
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的一种方式!
1.max 和saturate防止负值用哪个比较好?
2.deferred概念不清楚
3.第5节(2)中三种光照模式没找到在哪里定义的。。.\Editor\Data\CGIncludes没找到设定
u3d_Shader_effects笔记2 自定义surfaceDiffuseLight
标签:
原文地址:http://www.cnblogs.com/sun-shadow/p/4893540.html