ShaderGraph로 자체 제작 Node 제작 시 단계 + 요약
4089 단어 ShaderGraphUnityCustomNode
개발 환경
Unity2018.2.3
ShaderGraph3.0 preview
재료 볼 그래프의 자체 제작 노드 (사용자 정의 노드) 만드는 방법
필요한 요소로 다음과 같다
1. 지정된 노드의 호출 수신자
2. 노드 제목
3. 노드의 입력과 출력 설정
4. 실제 착색기 코드 설명
참조 URL
http://r-ngtm.hatenablog.com/entry/2019/01/19/190218
https://blogs.unity3d.com/jp/2018/03/27/shader-graph-custom-node-api-using-the-code-function-node/
참조 소스 코드
https://gist.github.com/rngtm/d8b4bcd8785f24193bbadcf25325cdb4
이번에 만든 거.
입력한 4개의 값을 합친 값을 출력하는 데 사용됩니다.
단계
단계는 다음과 같다.
미리 준비하다
C# 소스 코드의 생성 및 상속을 위해 CodeFunction 사용
using UnityEditorShaderGraph
public class クラス名:CodeFunctionNode
{
・・・
}
이런 느낌.
지정 노드의 호출 수신자
이 코드에 계층 이름 및 메뉴에 표시된 노드 이름 추가
'노드 만들기'에서 더욱 쉽게 실행할 수 있습니다.
※ ShaderGraph ver3.0.0에서 레벨 1("OO/OO"로 지정되었지만 반영되지 않음)
노드 제목
노드 제목은 실제 재료 볼 그래픽에 사용할 노드 제목과 같습니다.
다음 그림에서 "My Intergrate Node"가 바로 그것입니다.
クラス名()
{
name = "ノードでのタイトル名"
}
노드 입력 및 출력 설정
[Slot(0, Binding.None)] Vector1 r,
[Slot(1, Binding.None)] Vector1 g,
[Slot(2, Binding.None)] Vector1 b,
[Slot(3, Binding.None)] Vector1 a,
[Slot(11,Binding.None)] out Vector4 ret
Slot[]을 사용하여 노드를 가져오고 내보냅니다.
Slot의 첫 번째 매개변수는 SlotId이므로 중복이 없으면 문제가 없습니다.
출력할 때, 변수 전에 out을 사용하여 출력을 처리합니다.
실제 착색기 코드에 대한 설명(이번에 제작된)
using UnityEngine;
using UnityEditor.ShaderGraph;
using System.Reflection;
[Title("Custom","Integration")]
public class IntegrateShaderNode : CodeFunctionNode
{
public IntegrateShaderNode()
{
name = "MyIntegrateNode";
}
protected override MethodInfo GetFunctionToConvert()
{
return GetType().GetMethod("ShaderFunction",
BindingFlags.Static | BindingFlags.NonPublic);
}
private static string ShaderFunction
(
[Slot(0, Binding.None)] Vector1 r,
[Slot(1, Binding.None)] Vector1 g,
[Slot(2, Binding.None)] Vector1 b,
[Slot(3, Binding.None)] Vector1 a,
[Slot(11,Binding.None)] out Vector4 ret
)
{
ret = Vector4.zero;
return @"
{
ret = float4(r,g,b,a);
}"
;
}
}
오류 발생 시 해결 방법 (경험한 녀석)
사용자 정의 노드에서는 노드 자체에 문제가 없지만 재료 볼 코드에 오류가 발생하면 다음과 같은 느낌이 들 수 있습니다
이렇게 하면 정확하게 움직일 수 없기 때문에 수정이 필요하지만 익숙하지 않으면 의외로 렉이 걸린다.
이 장은 걸린 예시를 묘사했다.
벡터 모양으로 당겨져 재질 공의 쓰기에서 벗어났다
이번 Out은 Vector 4형으로 기술되었기 때문에 이와 관련된 모델입니다.//間違った例
ret = Vector4(1,1,1,1);
//正しい例
ret = float4(1,1,1,1);
아웃 출력이 초기화되고 있는 줄 알았어요.
호출된 함수 내에서 초기화되었기 때문에 직접 사용할 수 있을 줄 알았다.
처리 자체가 있기 때문에 의외로 걸린 사람이 많지 않습니까?그렇지 않나요?//間違った例
ret = ret + float4(1,1,1,1);
//正しい例
ret = 何かしらの初期化や計算して導かれる値
Reference
이 문제에 관하여(ShaderGraph로 자체 제작 Node 제작 시 단계 + 요약), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/herieru/items/cbc65f4849d048fa27c9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
필요한 요소로 다음과 같다
1. 지정된 노드의 호출 수신자
2. 노드 제목
3. 노드의 입력과 출력 설정
4. 실제 착색기 코드 설명
참조 URL
http://r-ngtm.hatenablog.com/entry/2019/01/19/190218
https://blogs.unity3d.com/jp/2018/03/27/shader-graph-custom-node-api-using-the-code-function-node/
참조 소스 코드
https://gist.github.com/rngtm/d8b4bcd8785f24193bbadcf25325cdb4
이번에 만든 거.
입력한 4개의 값을 합친 값을 출력하는 데 사용됩니다.
단계
단계는 다음과 같다.
미리 준비하다
C# 소스 코드의 생성 및 상속을 위해 CodeFunction 사용
using UnityEditorShaderGraph
public class クラス名:CodeFunctionNode
{
・・・
}
이런 느낌.
지정 노드의 호출 수신자
이 코드에 계층 이름 및 메뉴에 표시된 노드 이름 추가
'노드 만들기'에서 더욱 쉽게 실행할 수 있습니다.
※ ShaderGraph ver3.0.0에서 레벨 1("OO/OO"로 지정되었지만 반영되지 않음)
노드 제목
노드 제목은 실제 재료 볼 그래픽에 사용할 노드 제목과 같습니다.
다음 그림에서 "My Intergrate Node"가 바로 그것입니다.
クラス名()
{
name = "ノードでのタイトル名"
}
노드 입력 및 출력 설정
[Slot(0, Binding.None)] Vector1 r,
[Slot(1, Binding.None)] Vector1 g,
[Slot(2, Binding.None)] Vector1 b,
[Slot(3, Binding.None)] Vector1 a,
[Slot(11,Binding.None)] out Vector4 ret
Slot[]을 사용하여 노드를 가져오고 내보냅니다.
Slot의 첫 번째 매개변수는 SlotId이므로 중복이 없으면 문제가 없습니다.
출력할 때, 변수 전에 out을 사용하여 출력을 처리합니다.
실제 착색기 코드에 대한 설명(이번에 제작된)
using UnityEngine;
using UnityEditor.ShaderGraph;
using System.Reflection;
[Title("Custom","Integration")]
public class IntegrateShaderNode : CodeFunctionNode
{
public IntegrateShaderNode()
{
name = "MyIntegrateNode";
}
protected override MethodInfo GetFunctionToConvert()
{
return GetType().GetMethod("ShaderFunction",
BindingFlags.Static | BindingFlags.NonPublic);
}
private static string ShaderFunction
(
[Slot(0, Binding.None)] Vector1 r,
[Slot(1, Binding.None)] Vector1 g,
[Slot(2, Binding.None)] Vector1 b,
[Slot(3, Binding.None)] Vector1 a,
[Slot(11,Binding.None)] out Vector4 ret
)
{
ret = Vector4.zero;
return @"
{
ret = float4(r,g,b,a);
}"
;
}
}
오류 발생 시 해결 방법 (경험한 녀석)
사용자 정의 노드에서는 노드 자체에 문제가 없지만 재료 볼 코드에 오류가 발생하면 다음과 같은 느낌이 들 수 있습니다
이렇게 하면 정확하게 움직일 수 없기 때문에 수정이 필요하지만 익숙하지 않으면 의외로 렉이 걸린다.
이 장은 걸린 예시를 묘사했다.
벡터 모양으로 당겨져 재질 공의 쓰기에서 벗어났다
이번 Out은 Vector 4형으로 기술되었기 때문에 이와 관련된 모델입니다.//間違った例
ret = Vector4(1,1,1,1);
//正しい例
ret = float4(1,1,1,1);
아웃 출력이 초기화되고 있는 줄 알았어요.
호출된 함수 내에서 초기화되었기 때문에 직접 사용할 수 있을 줄 알았다.
처리 자체가 있기 때문에 의외로 걸린 사람이 많지 않습니까?그렇지 않나요?//間違った例
ret = ret + float4(1,1,1,1);
//正しい例
ret = 何かしらの初期化や計算して導かれる値
Reference
이 문제에 관하여(ShaderGraph로 자체 제작 Node 제작 시 단계 + 요약), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/herieru/items/cbc65f4849d048fa27c9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
단계는 다음과 같다.
미리 준비하다
C# 소스 코드의 생성 및 상속을 위해 CodeFunction 사용
using UnityEditorShaderGraph
public class クラス名:CodeFunctionNode
{
・・・
}
이런 느낌.지정 노드의 호출 수신자
이 코드에 계층 이름 및 메뉴에 표시된 노드 이름 추가
'노드 만들기'에서 더욱 쉽게 실행할 수 있습니다.
※ ShaderGraph ver3.0.0에서 레벨 1("OO/OO"로 지정되었지만 반영되지 않음)
노드 제목
노드 제목은 실제 재료 볼 그래픽에 사용할 노드 제목과 같습니다.
다음 그림에서 "My Intergrate Node"가 바로 그것입니다.
クラス名()
{
name = "ノードでのタイトル名"
}
노드 입력 및 출력 설정
[Slot(0, Binding.None)] Vector1 r,
[Slot(1, Binding.None)] Vector1 g,
[Slot(2, Binding.None)] Vector1 b,
[Slot(3, Binding.None)] Vector1 a,
[Slot(11,Binding.None)] out Vector4 ret
Slot[]을 사용하여 노드를 가져오고 내보냅니다.Slot의 첫 번째 매개변수는 SlotId이므로 중복이 없으면 문제가 없습니다.
출력할 때, 변수 전에 out을 사용하여 출력을 처리합니다.
실제 착색기 코드에 대한 설명(이번에 제작된)
using UnityEngine;
using UnityEditor.ShaderGraph;
using System.Reflection;
[Title("Custom","Integration")]
public class IntegrateShaderNode : CodeFunctionNode
{
public IntegrateShaderNode()
{
name = "MyIntegrateNode";
}
protected override MethodInfo GetFunctionToConvert()
{
return GetType().GetMethod("ShaderFunction",
BindingFlags.Static | BindingFlags.NonPublic);
}
private static string ShaderFunction
(
[Slot(0, Binding.None)] Vector1 r,
[Slot(1, Binding.None)] Vector1 g,
[Slot(2, Binding.None)] Vector1 b,
[Slot(3, Binding.None)] Vector1 a,
[Slot(11,Binding.None)] out Vector4 ret
)
{
ret = Vector4.zero;
return @"
{
ret = float4(r,g,b,a);
}"
;
}
}
오류 발생 시 해결 방법 (경험한 녀석)
사용자 정의 노드에서는 노드 자체에 문제가 없지만 재료 볼 코드에 오류가 발생하면 다음과 같은 느낌이 들 수 있습니다
이렇게 하면 정확하게 움직일 수 없기 때문에 수정이 필요하지만 익숙하지 않으면 의외로 렉이 걸린다.
이 장은 걸린 예시를 묘사했다.
벡터 모양으로 당겨져 재질 공의 쓰기에서 벗어났다
이번 Out은 Vector 4형으로 기술되었기 때문에 이와 관련된 모델입니다.
//間違った例
ret = Vector4(1,1,1,1);
//正しい例
ret = float4(1,1,1,1);
아웃 출력이 초기화되고 있는 줄 알았어요.
호출된 함수 내에서 초기화되었기 때문에 직접 사용할 수 있을 줄 알았다.
처리 자체가 있기 때문에 의외로 걸린 사람이 많지 않습니까?그렇지 않나요?
//間違った例
ret = ret + float4(1,1,1,1);
//正しい例
ret = 何かしらの初期化や計算して導かれる値
Reference
이 문제에 관하여(ShaderGraph로 자체 제작 Node 제작 시 단계 + 요약), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/herieru/items/cbc65f4849d048fa27c9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)