嘿所有我在画布上加载了一个自定义模型,一切正常。我得到的唯一问题是我没有胶水如何让我的阴影在模型本身上透明(模型应该投射并接收阴影)。
我的代码如下:
var loader = new THREE.JSONLoader();
loader.load('model/p3.json', handle_load);
var mesh;
function handle_load(geometry, materials) {
var material = new THREE.MeshPhongMaterial();
mesh = new THREE.Mesh(geometry,material);
scene.add(mesh);
mesh.position.z = 0;
mesh.position.y = 0;
mesh.rotation.y = 5;
//LIGHT
var ambient = new THREE.AmbientLight(0xffffff, 0.15);
ambient.target = mesh;
scene.add(ambient);
var light = new THREE.DirectionalLight(0xffffff, 1);
light.target = mesh;
light.castShadow = true;
light.position.z = -150;
light.position.y = 150;
light.position.x = 150;
light.shadow.bias = 0;
light.shadowDarkness = 0.2;
light.shadow.mapSize.width = 2048 * 2;
light.shadow.mapSize.height = 2048 * 2;
scene.add(light);
mesh.receiveShadow = true;
mesh.castShadow = true;
}
var shadowmaterial = new THREE.ShadowMaterial();
shadowmaterial.opacity = 0.2;
var material2 = new THREE.MeshPhongMaterial({
color: 0xffffff,
});
var geometry3 = new THREE.PlaneGeometry(500, 500, 100, 100);
var mesh3 = new THREE.Mesh(geometry3, shadowmaterial);
mesh3.rotation.x = -90 * Math.PI / 180;
mesh3.position.y = 0;
scene.add(mesh3);
mesh3.receiveShadow = true;
渲染如下所示:
我感谢每一位帮助
答案 0 :(得分:0)
因为您的网格物体始终是灰色的,而地面是白色的,所以阴影中总是有对比度的。根据我的发现,阴影旨在将这种物理逼真性内置到其中,从而不允许直接调整某些阴影属性,而这些阴影属性通常是通过调整材质和光照来实现的。
您可以将平面材质的颜色改为灰色而不是白色,从而提高光强度。或增亮您的网格材料并降低光强度。
您也可以添加更多灯光并进行调整。增大环境光并减小方向会降低阴影对比度。其他种类的灯光也会产生影响。
您还可以播放材质的不同方面,以使白色更暗,从而影响阴影。一个例子是反射率。因此,如果您降低了方向性但希望它仍对方向性做出反应,则可能会影响反射率和镜面反射。