2017-06-15 18 views
14

tôi thêm một nút và cố gắng để thiết lập cái bóng mờ với SceneKitbóng mềm, bóng mờ trong SceneKit

đây là cấu hình ánh sáng của tôi, tôi đã cố gắng thiết lập shadowRadius

light = [SCNLight light]; 
light.type = SCNLightTypeDirectional; 
light.castsShadow = true; 
light.shadowMode = SCNShadowModeForward; 
light.shadowRadius = 5; 
light.shadowMapSize=CGSizeMake(4000, 4000); 
light.orthographicScale=25; 
light.zNear=1; 
light.zFar=1000; 

nhưng kết quả là không nhẹ nhàng hơn hơn khi tôi không được thiết lập shadowRadius nó ở đây: enter image description here

tôi đã cố gắng thêm samplecount

light = [SCNLight light]; 
light.type = SCNLightTypeDirectional; 
light.castsShadow = true; 
light.shadowMode = SCNShadowModeForward; 
light.shadowRadius = 5; 
// add samplecount 
light.shadowSampleCount = 5; 
light.shadowMapSize=CGSizeMake(4000, 4000); 
light.orthographicScale=25; 
light.zNear=1; 
light.zFar=1000; 

kết quả trông giống như sau enter image description here

bóng dường như mềm mại nhưng bóng này bắt đầu từ dưới cùng của nút (z phối hợp là 0). Tôi dành rất nhiều thời gian để thiết lập bóng mềm chỉ ở cạnh nút, không phải từ phía dưới. Nhưng không có kết quả.

Vấn đề này cũng xảy ra khi thêm hai nút vượt qua (không chỉ nút và hình học như SCNFloor)

Vấn đề của tôi là làm thế nào để có được cái bóng mờ (shadow mềm) với ánh sáng hướng.

bất kỳ trợ giúp nào sẽ được đánh giá cao!

Trả lời

1

Tôi thực sự có thể làm mờ bóng với orthographicScale. Tôi không biết tại sao, nhưng mẹo này làm việc cho tôi. Hy vọng có thể giúp một người nào đó

light.shadowMapSize=CGSizeMake(4000, 4000); 
light.orthographicScale=100; // bigger is softer 

Tôi cũng thay đổi shadowMapSize với giá trị lớn hơn và thiết isJitteringEnabledantialiasingMode để giảm răng cưa.

1

Swift 4/Xcode 9.2

tôi nhận được một kết quả khá tốt với các thiết lập này:

light2.castsShadow = true 
light2.automaticallyAdjustsShadowProjection = true 
light2.maximumShadowDistance = 20.0 
light2.orthographicScale = 1 

light2.shadowMapSize = CGSize(width: 2048, height: 2048) 
light2.shadowMode = .forward 
light2.shadowSampleCount = 128 
light2.shadowRadius = 3 
light2.shadowBias = 32 

Tăng shadowRadius-12 đã giúp rất nhiều với mô hình của tôi, nhưng sau đó tôi cần để tăng shadowSampleCountshadowBias để không nhận được hiện vật.