2017-06-15 4 views
14

ich einen Knoten hinzufügen und versuche Schatten verschwimmen mit SceneKitweiche Schatten, Schatten Unschärfe in SceneKit

hier Config meinem Licht zu Einstellung, ich habe versucht shadowRadius zu setzen

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; 

aber das Ergebnis ist nicht weiches als wenn ich ‚hier nicht gesetzt shadowRadius es: enter image description here

ich versuche samplecount

hinzufügen
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; 

Ergebnis sieht aus wie folgt enter image description here

Schatten erscheinen weich, aber dieser Schatten von der Unterseite des Knotens beginnen (z-Koordinate 0 ist). Ich verbringe viel Zeit, um weichen Schatten nur am Rand des Knotens und nicht von unten zu setzen. Aber kein Ergebnis.

Dieses Problem trat auch auf, wenn fügen Sie zwei Knoten kreuzen (nicht nur Knoten und Geometrie als SCNFloor)

Mein Problem ist, wie Schatten Unschärfe zu bekommen (weiche Schatten) mit Richtung Licht.

jede Hilfe wäre willkommen!

Antwort

1

Ich kann wirklich Schatten Unschärfe mit orthographicScale machen. Ich weiß nicht warum, aber dieser Trick funktioniert für mich. Hoffe, kann

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

ich auch shadowMapSize, um größeren Wert zu ändern und Einstellung isJitteringEnabledantialiasingMode jemand helfen Aliasing zu reduzieren.

1

Swift 4/Xcode 9.2

ich mit diesen Einstellungen ein ziemlich gutes Ergebnis bekam:

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 

Erhöhung der shadowRadius-12 viel mit meinem Modell half, aber dann musste ich zu erhöhen shadowSampleCount und shadowBias keine Artefakte zu erhalten.