2017-06-15 39 views
14

dodam jeden węzeł i spróbować ustawienie cień rozmycie z SceneKitmiękki cień, cień rozmycie w SceneKit

oto moje światło config, ja spróbować ustawić 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; 

ale wynik nie jest miękka niż kiedy nie mogę ustawić shadowRadius to tutaj: enter image description here

próbowałem dodać 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; 

wynik wygląda po enter image description here

cień wydaje miękki lecz cień rozpocząć od dołu węzła (współrzędnej z jest 0). Spędzam dużo czasu, aby ustawić miękki cień tylko na krawędzi węzła, a nie z dołu. Ale bez rezultatu.

Ten problem wystąpił również podczas dodać dwa węzeł przejechać (nie tylko węzeł i geometria jak SCNFloor)

Moim problemem jest to, jak uzyskać rozmycie cieni (soft shadow) w kierunku światła.

każda pomoc będzie doceniona!

Odpowiedz

1

Naprawdę mogę zrobić rozmycie w cieniu przy pomocy orthographicScale. Nie wiem dlaczego, ale ta sztuczka działa dla mnie. Nadzieję, że może pomóc ktoś

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

ja również zmienić shadowMapSize do większej wartości i ustawienie isJitteringEnabledantialiasingMode zmniejszenie aliasingu.

1

Swift 4/Xcode 9.2

mam całkiem dobry wynik z tymi ustawieniami:

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 

Zwiększenie shadowRadius do 12 Pomógł przy moim modelu, ale potem potrzebne aby zwiększyć liczbę artefaktów o shadowSampleCount i shadowBias.