SceneKit의 SCNTechnique를 사용하여 물체의 윤곽을 빛냅니다.

SceneKit로 할 수 있는 쉐이더 표현의 하나, SCNTechnique를 사용해 물체의 주위를 빛내는 방법을 소개합니다.

다만, 나도 완전하게 이해하고 있지 않기 때문에, 실장의 흐름을 설명하는 것에 포커스해, 세세한 설명은 또의 기회로 합니다.

완성 이미지





만드는 방법 개요


  • metal 파일 작성
  • plist 파일에서 사전을 만듭니다
  • SCNTechnique를 만들어 SceneView에 전달
  • 적응하는 Node의 categoryBitMask를 설정

  • 이런 흐름입니다.

    metal 파일 작성



    shader를 실행하는 metal 파일을 만듭니다. 나는 이것을 완전히 이해하지 못한다. 앞으로 열심히 이해하겠습니다.

    htps : // 기주 b. 코 m / ぁ 안아 bs / SC는 ch Nike G ぉ w 의 코드를 참고로 흉내내어 만들어 보았습니다. 내 샘플 코드는 여기에 있습니다.



    plist 파일로 사전 만들기



    결국 SCNTecnique에는 Dictionary 유형을 전달하므로 plist를 만들어 Dictionary를 정의합니다. key 와 value 는 Apple 공식 htps : //에서 ゔぇぺぺr. 아 ぇ. 코 m / 도쿠 멘 타치 온 / s 세네 키 t / sc 에 쓰고 있습니다만, 기억하는 것은 힘들군요 w

    저도 앞으로 샘플 을 놀아 시험하면서 기억해 가고 싶습니다.



    SCNTechnique를 만들어 SceneView에 전달



    NodeTechnique.plist에서 dictionary를 검색하고 SCNTechnique를 init합니다. 즉, 반드시 plist일 필요는 없고, 원 파일은 JSON등에서도 좋다. 물론 코드로 만들 수도 있습니다. (긴하지만)
    if let path = Bundle.main.path(forResource: "NodeTechnique", ofType: "plist"),
        let dict = NSDictionary(contentsOfFile: path) as? [String : Any] {
    
        let technique = SCNTechnique(dictionary: dict)
        sceneView.technique = technique
    }
    

    적응하는 노드의 categoryBitMask 설정



    앞의 plist에서, includeCategoryMask를 2로 하고 있기 때문에,categoryBitMask가 2의 node에만, 해당 shader가 적용됩니다.

    categoryBitMask의 기본값은 1입니다.
    let box = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0.01)
    box.firstMaterial?.diffuse.contents = UIColor.darkGray
    let node = SCNNode(geometry: box)
    node.categoryBitMask = 2
    

    완제품



    빛나는 빨간색 테두리가 BoxNode에 적용되었습니다. 다크 사이드 감이 있네요.



    참고


  • htps : // 기주 b. 코 m / ぁ 안아 bs / SC는 ch Nike G ぉ w
  • ㅇㅇㅇㅇㅇㅇ엔기네. 하테나 bぉg. 코m/엔트리/2017/09/04/154924
  • htps : //에서 ゔぇぺぺr. 아 ぇ. 코 m / 도쿠 멘 타치 온 / s 세네 키 t / sc
  • 좋은 웹페이지 즐겨찾기