[英]ios Scenekit shadow differs when use custom surface modifier
我有一個簡單的場景,有兩架飛機。 第一個帶有花朵紋理和陰影的平面被投射到背景中的平面上(牆壁紋理)。
我嘗試使用表面修改器SCNShaderModifierEntryPointSurface並且陰影變得完全不同。 現在它不再是花,而是投下了它自己的平面的陰影。
請參閱附件圖片。
我的代碼花平面
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.