0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[SceneKit] SCNProgramを使ってSCNMaterialにシェーダーをかける

Posted at

SCNMaterialの描画を変える方法はいくつかあるが、今回はSCNProgramを紹介する。
SCNProgramはSCNMaterialの描画を完全に制御することが出来る。
似たような機構にshaderModifierがあるが、こちらは既存の描画を拡張する意味合いが強いと思う。

SCNProgramは、その歴史的な事情からOpenGLESとMetalの両方のシェーダを受け取れるように出来ている。
特にfragmentShaderプロパティや、vertexShaderプロパティはOpenGLES用のプロパティである。

let program = SCNProgram()
program.fragmentShader
program.vertexShader

Metalのシェーダを渡す際はMTLLibraryを渡し、fragmentFunctionNamevertexFunctionNameを指定する事になる。

let program = SCNProgram()
program.library = library
program.fragmentFunctionName = "myFragment"
program.vertexFunctionName = "myVertex"

肝心のMTLLibraryはアプリコンパイルのタイミングでコンパイルされているので次のように取り出すことが出来る。


let library = MTLCreateSystemDefaultDevice()!.makeDefaultLibrary()!

このようにして出来上がったprogramは、SCNMaterialのprogramプロパティにセットすることで動作します。

node.geometry.firstMaterial.program = program
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?