SceneKit의 SCNTechnique를 사용하여 물체의 윤곽을 빛냅니다.
다만, 나도 완전하게 이해하고 있지 않기 때문에, 실장의 흐름을 설명하는 것에 포커스해, 세세한 설명은 또의 기회로 합니다.
완성 이미지
만드는 방법 개요
이런 흐름입니다.
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에 적용되었습니다. 다크 사이드 감이 있네요.
참고
결국 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에 적용되었습니다. 다크 사이드 감이 있네요.
참고
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
}
앞의 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에 적용되었습니다. 다크 사이드 감이 있네요.
참고
Reference
이 문제에 관하여(SceneKit의 SCNTechnique를 사용하여 물체의 윤곽을 빛냅니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kboy/items/e420ba7d97874566a402텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)