untiy 3d ShaderLab_第9章_2_球体阴影(二) 阴影的淡入/淡出
来源:互联网 发布:单片机串口是什么意思 编辑:程序博客网 时间:2024/05/04 09:53
9.2 阴影的淡入/淡出
在上一节的例子中,我们仅仅判断了是否能看到光源,其实不仅仅能判断是否可以看到光源,当我们看不到光源时,还可以计算出此时点距离光亮地带的远近程度,等价于到阴影中心的远近程度,这样就可计算一个带浓淡变化的阴影里,而这是在一般的阴影实现算法中比较难以做到的。
如图所示。
在上一节的例子中,我们仅仅判断了是否能看到光源,其实不仅仅能判断是否可以看到光源,当我们看不到光源时,还可以计算出此时点距离光亮地带的远近程度,等价于到阴影中心的远近程度,这样就可计算一个带浓淡变化的阴影里,而这是在一般的阴影实现算法中比较难以做到的。
如图所示。
具体实现此效果的Shader是SphereShadow_ 2.shader,其关键代码如下:
float4 frag(v2f i):COLOR{float3 litDir=normalize(i.litDir);float3 spDir=i.spDir;float spDistance=length(spDir);spDir=normalize(spDir);float cosV=dot(spDir,litDir);float sinV=sin(acos(max(0,cosV)));float D=sinV*spDistance;float shadow=step(_spR,D);//spR>D 0,else 1float atten=pow((D/_spR),4);//计算一个到球体中心位置的衰减float c=lerp(1-_Intensity,1,min(1,shadow+atten));//0 is dark //*step(0,dot(i.N,litDir))应用此衰减到输出return i.vc*c;}
该Shader和上一节的不同之处就在于它不仅仅计算了物体是否处于球体投影中,而且也计算了照射到此点的光线到球体中心的距离相关衰减,然后应用到最终的阴影输出,从而得到如图:
0 0
- untiy 3d ShaderLab_第9章_2_球体阴影(二) 阴影的淡入/淡出
- untiy 3d ShaderLab_第9章_2_球体阴影(一) 平行光对球体的投影
- untiy 3d ShaderLab_第9章_3_球体阴影(三) 点光源对球体的投影
- untiy 3d ShaderLab_第9章_1_平面阴影(二) 点光源对平面的投影
- untiy 3d ShaderLab_第9章_1_平面阴影(一)
- untiy 3d ShaderLab_第9章_1_平面阴影(三) 点光源对平面的投影
- untiy 3d ShaderLab_第8章_4_ 单光照贴图在Deferred 渲染路径下的实时阴影
- untiy 3d ShaderLab_第8章_2_在效果和性能间进行权衡
- untiy 3d ShaderLab_第6章_VertexLit渲染路径_2_顶点照明和Unity存放光源的第一种方式
- untiy 3d ShaderLab_第3章_Shader(着色器)中用到的各种空间概念
- untiy 3d ShaderLab_第4章_基本的光照模型
- untiy 3d ShaderLab_第8章_ 基于光照贴图的烘焙照明
- untiy 3d ShaderLab_第8章_ 基于光照贴图的烘焙照明
- untiy 3d ShaderLab_第5章_第一个被执行的Pass_1_不同LightMode 被选择的顺序
- untiy 3d ShaderLab_第 2 章Unity中Shader(着色器)的形态_1_Unity通过ShaderLab 来组织Shader
- untiy 3d ShaderLab_第5章_第一个被执行的Pass_2_3个渲染路径之外
- untiy 3d ShaderLab_第7章_ Forward渲染路径_2_Forward渲染路径下的重要光源
- untiy 3d ShaderLab_第7章_ Forward渲染路径_3_重要光源在ForwardAdd内的执行
- 变量B的计算值为它的值
- css:font-family 属性值
- 设计模式概述 从招式与内功谈起——设计模式概述(一):设计模式从何而来?
- 初识Linux2--文件管理
- 小O对讲--自主开发
- untiy 3d ShaderLab_第9章_2_球体阴影(二) 阴影的淡入/淡出
- 在网页加载完成后执行——body的onload()
- 数据结构与算法——出栈序列统计
- 在阿里云ECS上从零开始搭建nginx服务器
- make file 学习记录
- ecshop中smarty比较操作符(eq,ne,neq)含义
- SpringMVC从入门到精通之第五章【转】
- epoll event 处理
- CodeForces 622F