away3d 4x的阴影方法们

要通过计算机创建真实可信的图像,形体,灯光,阴影,这三要素必不可少。这里介绍一下away3d中提供的阴影解决方案,以及每种方案的用法作为备忘录;
要使用阴影,首先需要知道已下几点:
1:away3d阴影是通过Material的shadowMethod属性添加的;
2:要添加阴影必须在场景中提供光源,away3d中提供了两种灯光类型-PointLight和DirectionalLight。只有DirectionalLight能产生阴影;
3:尽管多个光源能在场景中共同作用,但当PointLight和DirectionalLight混合使用时,产生的阴影可能会出现不正常的情况;
4:光源即使不添加到场景也可照亮场景物体,然而要产生正确的阴影效果就必须将光源添加到场景;
5:阴影相关的属性,产生:castsShadows:Boolean决定物体是否产生阴影;接受:shadowMethod:决定物体是否接受阴影(阴影附着在上面)光源的shadowMapper:默认情况下是DirectionalShadowMapper;
6:阴影贴图不受材质是否透明影响;即使完全透明的物体,仍然会产生阴影;
接下来将对各种阴影进行说明:
HardShadowMapMethod:用于创建边界清晰的投射阴影贴图;这种阴影不包含过滤算法,所以性能是最好的;一般制作对性能要求较高的游戏项目时用;
DitheredShadowMapMethod:通过随机采样的方式创建边沿柔和的阴影;这种阴影可通过range参数设置边沿的模糊度;range较大的时候阴影边界会有颗粒化效果;此阴影计算方式的优点在于边沿是可控的。
FilteredShadowMapMethod:通过双线插值算法计算清晰的阴影;这种阴影的边界相对于HardShadowMapMethod更加柔和;通过设置较高的反锯齿值貌似也可提高阴影的柔和度;
NearShadowMapMethod:这个阴影方法通过计算摄影机距离来淡化阴影;这种阴影用于产生一种均匀的阴影渐隐效果;相对来说算是最逼真的阴影模拟方法了;需要注意的是,想要使用这个方法需要传递给构造方法的不是DirectionalLight实例,而是SimpleShadowMapMethodBase的实例;同时需要DirectionalLight的shadowMapper属性是NearDirectionalShadowMapper的实例;
SoftShadowMapMethod:相对于DitheredShadowMapMethod的颗粒感十足的阴影边界,此阴影计算方法将得到更加柔和的阴影边界;这个方法提供了两个参数改变阴影的效果。采样(第二参数):值域1-32数值越大则越精确,越慢;范围(第三参数):值越大阴影的虚化范围越大;搭配NearShadowMapMethod并参数设置得当可以实现真实的阴影效果,当然,代价就是速度最慢;
TripleFilteredShadowMapMethod:此方法采用三重过滤算法计算阴影贴图;效果优于FilteredShadowMapMethod一些;由于SoftShadowMapMethod和FilteredShadowMapMethod的效果完全能替代它所以官方不推荐使用;这个方法的优点就是容易使用,和FilteredShadowMapMethod一样,此方法不需要参数设置直接作用;
以下是各种shadow对于性能的消耗,使用时应该心中有数,选择最合适的:
HardShadowMapMethod<DitheredShadowMapMethod<FilteredShadowMapMethod<TripleFilteredShadowMapMethod<SoftShadowMapMethod(粗略测试结果,如有错误请君指正)
NearShadowMapMethod不在里面是因为NearShadowMapMethod需要和其他Method合作运行;

以下记录阴影测试代码脚本便于测试:
测试环境提供了一个观察用的摄影机控制器,建立了直线灯光,一个地面和三个盒子分别采用colorMaterial和TextureMaterial;

import away3d.cameras.lenses.OrthographicOffCenterLens;
import away3d.cameras.Camera3D;
import away3d.materials.ColorMaterial;
import away3d.primitives.CubeGeometry;
import away3d.primitives.PlaneGeometry;
import away3d.entities.Mesh;
import away3d.containers.View3D;
import away3d.lights.PointLight;
import away3d.materials.lightpickers.StaticLightPicker;
//
import away3d.materials.methods.HardShadowMapMethod;
import away3d.materials.methods.DitheredShadowMapMethod;
import away3d.materials.methods.FilteredShadowMapMethod;
import away3d.materials.methods.NearShadowMapMethod;
import away3d.materials.methods.SoftShadowMapMethod;
import away3d.materials.methods.TripleFilteredShadowMapMethod;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值