簡體   English   中英

ios Scenekit 陰影在使用自定義表面修改器時有所不同

[英]ios Scenekit shadow differs when use custom surface modifier

我有一個簡單的場景,有兩架飛機。 第一個帶有花朵紋理和陰影的平面被投射到背景中的平面上(牆壁紋理)。

我嘗試使用表面修改器SCNShaderModifierEntryPointSurface並且陰影變得完全不同。 現在它不再是花,而是投下了它自己的平面的陰影。

請參閱附件圖片。

1. 在此處輸入圖片說明

2. 在此處輸入圖片說明

我的代碼花平面

SCNPlane *planeGeometry = [SCNPlane planeWithWidth:16.0 height:8.0];
SCNNode *planeNode = [SCNNode nodeWithGeometry:planeGeometry];

第一張圖片的代碼沒問題

planeGeometry.firstMaterial.diffuse.contents = [UIImage imageNamed:@"flowerTexture"];

第二張圖片的代碼不好

NSString * surfModifier = ...;

planeGeometry.firstMaterial.shaderModifiers = @{SCNShaderModifierEntryPointSurface : surfModifier};
SCNMaterialProperty* diffuseTexture = [SCNMaterialProperty materialPropertyWithContents:[UIImage imageNamed:@"flowerTexture"]];

[planeGeometry.firstMaterial setValue:diffuseTexture forKey:@"mixTexture"];

和 surfModifier 着色器

uniform sampler2D mixTexture;

#pragma transparent
#pragma body

vec4 originalTexture = texture2D(mixTexture, _surface.diffuseTexcoord);
_surface.diffuse = originalTexture;

請幫我讓第二個工作

謝謝

您的着色器修改器專門在渲染該花平面節點時應用。 您本質上是對花平面節點進行后期處理,此后不會影響對象上的陰影。

一個解決方案是基本上預處理花平面紋理,然后像示例 1 中那樣將其分配給平面。因此,例如,使用 Metal 將花圖像渲染為紋理,您仍然可以使用着色器代碼對其進行修改,然后將結果用作 Scenekit 中花平面的紋理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM