Unity的unity 安卓 实时阴影影效率低吗

unity(48)
For the sake of anyone else who is trying to write a fragment shader that receives shadows, I figured it out.
You must do these things:
'#include &AutoLight.cginc&''#include &Lighting.cginc&'Add &Tags {&LightMode& = &ForwardBase&}'#pragma multi_compile_fwdbase'Add the Unity macros to your VSOut struct, VS and PS: LIGHTING_COORDS, TRANSFER_VERTEX_TO_FRAGMENT, LIGHT_ATTENUATION.
None of this is documented in the Unity manual.
To access the primary directional light color, unity_LightColor[0] works as long as you don't add &Tags {&LightMode& = &ForwardBase&}&. If you do add that line, then it doesn't work: use _LightColor0.rgb instead. Why? Who knows.. probably makes sense to someone
with access to the Unity source code. Which means no one.
Good luck!
Shader &Custom/PeterShader2& {Properties{
_MainTex (&Base (RGB)&, 2D) = &white& {}}&CGINCLUDE&#include &UnityCG.cginc&#include &AutoLight.cginc&#include &Lighting.cginc&&uniform sampler2D _MainTex;&ENDCG&SubShader{
Tags { &RenderType&=&Opaque& }
Lighting On&
Tags {&LightMode& = &ForwardBase&}&
CGPROGRAM&
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_fwdbase&
struct VSOut
float4 pos
: SV_POSITION;
: TEXCOORD1;
LIGHTING_COORDS(3,4)
VSOut vert(appdata_tan v)
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
o.uv = v.texcoord.xy;&
TRANSFER_VERTEX_TO_FRAGMENT(o);&
float4 frag(VSOut i) : COLOR
float3 lightColor = _LightColor0.rgb;
float3 lightDir = _WorldSpaceLightPos0;
float4 colorTex = tex2D(_MainTex, i.uv.xy * float2(25.0f));
atten = LIGHT_ATTENUATION(i);
float3 N = float3(0.0f, 1.0f, 0.0f);
NL = saturate(dot(N, lightDir));&
float3 color = colorTex.rgb * lightColor * NL * atten;
return float4(color, colorTex.a);
}} FallBack &Diffuse&}
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
(1)(6)(15)(9)(3)(11)(7)(3)(12)(5)(3)(6)(7)(1)【岚依】【教程】免费版其实没那么差!至少【阴影】可以搞!_unity3d吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:60,010贴子:
【岚依】【教程】免费版其实没那么差!至少【阴影】可以搞!收藏
好,也许还有一些人不知道如何在免费版里烘焙阴影,那么我就发个帖说说吧~呐,我也在用免费版,现在没有阴影。。。
unity3d千锋VR培训0元入学,「高薪」就业!「预约申请2周免费试学」.火爆预约中!千锋VR培训,招生限大专以上学历,年龄30岁以下,符合条件即可报名,入学即签订就业协议!
好了,在Inspector里选中Directional Light,把Shadow打开,这时unity会提示你“免费版里不能使用实时阴影”嗯,实时阴影unity免费版里的确是不能搞,但是unity官方却把顶尖的Beast光影烘培技术让免费版也可以使用,这样就很好了。(尽管只能烘焙静态阴影。。。)
现在,在Window菜单中打开LightMapping。
啊对,在继续之前,先得确定准备烘焙光影的物体是否为静态(Static),或者说,在光照贴图上呈静态。
好,继续,开始烘焙。开始烘培后unity右下角将会出现烘焙的进度。同时,大家可能在任务管理器里发现一个新进程:thebeast.对,就是楼上所讲的the beast,一个很好的光影烘焙系统。烘焙的时间取决于需要烘焙的物体以及电脑的性能,可能需要好几分钟。
嗯,好了!看到了吗?这是阴影!!!!!!!!液~~看看被圈出来的地方~~
牛叉了以前怎么也搞不好,原来还要设个静态
。。。。。。。为啥我这可以用那个选项。。。。。。。。。。。
那不就是要分好uv吗?但是地面的话都是重复贴图啊怎么渲染阴影啊??
火星时代unity3d,争当游戏大触,月薪过万小意思,手绘技能,概念设计,商业应用一步到位,你与u3d游戏特效设计师只差一步,赶快点击吧!
特地来顶,烘培不但是免费的福利,其实场景制作至少现阶段都得了解
我用盗版Pro版的
就算用pro,对于建筑之类的静态的东西阴影放好光之后烘培,这样搞一大堆灯的时候貌似可以不卡。。。
请你看看有没有什么地方搞错了……
检查一下我圈起来的地方。你可以清楚地看见,我用的是免费版(License Type:Unity);其实,即使你要用Pro版或者破解版,静态阴影还是很重要的:相对于实时阴影,静态阴影质量更高,占用的资源也更小。
又学到了一点,顶你!
当时的蓝衣还很羞涩~~~
求pro版的阴影在哪里
请问下为什么我在准备烘焙的时候,就是最后一步点击确认的时候,发现旁边的color space 为lightmaps阿?
就是这样的:
大神你还在么。。。我用的4.5破解版木有阴影,砸破?
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或求助 这类型的实时阴影怎么实现 ?_unity3d吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:60,010贴子:
求助 这类型的实时阴影怎么实现 ?收藏
RT问题2 :图片如何在unity里转成网格?问题3:unity里是否可以直接使用网格做成动画?
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或游戏开发(3)
unity3D(2)
图形编程(2)
UnityEffects系列(1)
UnityEffects(2)之(2)ProjectorShadow(手游上的实时阴影方案)
上一篇说到了在unity5.x中实现shadowMap的方法()。但是由于它需要使用DepthTexture有一定的硬件要求(参考这里:),而且是一个posteffect(后期效果),在手机上面还是效率不高。
手游上面的人物阴影一般都是比较取巧的方法(毕竟没有这么多人用机皇:),基本上遵循“够用就好,看起来不错就好”的原则),一种是给人物脚底贴一个黑圈圈,第二种是使用projector。第一种就不提了,效果不好。这里我们就讨论一下后者,使用投影来实现手游中的实时阴影。据说猪场的《功夫熊猫3》中的阴影也是使用类似的方法实现的,效果不错,但是阴影投影到台阶这种不接受阴影的物体就会有一点小穿帮,也是这种方式的一个缺点,如下图:
建筑物等静态物体产生的阴影一般用光照烘焙来实现,这里就不讨论了。
江湖惯例先贴图:
工程放在:&使用unity5.4
场景是Scene/(2)ProjectorShadow
实现的原理和shadowMap差不多,只不过不生成深度图,而是使用replaceShader生成一张“轮廓”图,使用untiy自带的Projector组件投影到场景中,在shader中计算从而生成阴影效果。使用replaceShader是为了避免渲染“轮廓”图的时候还是用原来复杂的shader,照成不必要的性能浪费。替换后我们只输出纯色(方便测试)或者alpha值到“轮廓”图。
我们生成的“轮廓”图:
投影的时候只需要判断该像素的alpha值,alpha为0的不在阴影中,alpha值越小阴影越透明。
由于原理和上一篇差不多就不做过多解释了,这里列两点比较值得注意的:
1、渲染“轮廓”图的相机视锥(光锥)的生成方式我们使用了通过场景的包围盒来校正的方法,这种方式比较适合手游,毕竟多数手游需要动态阴影的就是那些人物(其他的都是静态阴影通过光照烘培来实现),这样最大化的利用的这张“轮廓”图,提高了阴影的质量。对应方法是ShadowUtils. SetLightCamera(Bounds b, Camera lightCamera)
参考资料:
2、当“轮廓”图中的物体贴近边缘的时候阴影会产生bug,如下图,看到阴影被拉长了一条。
这是由于“轮廓”图的wrapMode采用使用了clamp导致的,clamp模式就是uv在超过1的时候把图像边缘的像素拉伸,如下图:
如何解决呢?两个方法。
1)求包围盒的时候设置一个offset,使包围盒向外扩大一点,这样物体就不会贴着“轮廓”图的边缘了
2)在投影器的shader中使用一张图来做遮罩(下图),这样边缘的像素可以过滤掉,还可以做出边缘的阴影渐隐的效果。
上面两种方法都可以从代码中找到。
下面我们来对比一下shadowMap,分析一下各自的优缺点:
通用,物体穿透不会穿帮,能很好的处理遮挡关系。
1.依赖DepthTexture,浮点深度图,有一点硬件需求。
有硬件要求:
2.unity中深度图不能单独输出,要手动写shader从自带的depthMap中取出深度来保存,比较麻烦。使用替换渲染时,不产生阴影的物体必须替换为白色,不替换会默认黑色,然后黑色又是深度最小值,会使得物体都处于阴影之中,不好控制。
3.产生和接受阴影的物体都要渲染到深度图
4.比较深度的误差偏移有可能根据平台而不太一样
5.要为接受阴影的物体提供shader
6.不支持半透明物体的阴影
ProjectorShadow
1.不依赖DepthTexture
2.不用为接受阴影的物体提供shader
3.只需要渲染产生阴影的物体
4.性能比shadowMap有优势
5.支持半透明物体阴影,如下图:
1.是一个trick,不通用
2.不能处理物体对阴影的遮挡,接受阴影的物体和产生阴影的物体有穿透时会穿帮
总体来说ProjectorShadow比较适合移动平台,能模拟出效果不错的实时阴影
扩展:还可以使用pcf优化阴影边界
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:3229次
排名:千里之外
评论:11条

我要回帖

更多关于 unity3d 手机实时阴影 的文章

 

随机推荐