자라고싶다
[HLSL]2 Pass Outline 본문
Shader "Example/Outline"
{
Properties
{
_TintColor("TintColor", Color) = (1,1,1,1)
_LineColor("LineColor", Color) = (0,0,0,0)
_LineWidth("LineWidth", Range(0,1)) = 0.5
}
SubShader
{
Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" }
Pass
{
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
struct Attributes
{
float4 positionOS : POSITION;
};
struct Varyings
{
float4 positionHCS : SV_POSITION;
};
half4 _TintColor;
Varyings vert(Attributes IN)
{
Varyings OUT;
OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);
return OUT;
}
half4 frag(Varyings IN) : SV_Target
{
half4 color = _TintColor;
return color;
}
ENDHLSL
}
Pass
{
Name"Outline"
Tags{"LightMode" = "Outline"}
Cull front
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
struct Attributes
{
float4 positionOS : POSITION;
float4 normal : NORMAL;
};
struct Varyings
{
float4 positionHCS : SV_POSITION;
float4 normal : NOMRAL;
};
half4 _LineColor;
half _LineWidth;
Varyings vert(Attributes IN)
{
Varyings OUT;
OUT.normal.xyz = TransformObjectToWorldNormal(IN.normal);
IN.positionOS.xyz += OUT.normal.xyz * _LineWidth;
OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);
return OUT;
}
half4 frag(Varyings IN) : SV_Target
{
half4 color = _LineColor;
return color;
}
ENDHLSL
}
}
}
Universal Renderer Data 에서 Add Renderer Feature - Render Objects 를 추가하고 LightMode Tags에 Outline 추가.
'Unity > UnityShader' 카테고리의 다른 글
[HLSL]Tessellation + Displacement (1) | 2023.11.23 |
---|---|
[HLSL] Diffuse Wrap + Shadow Ramp (0) | 2023.10.17 |
[HLSL]Triplanar (0) | 2023.10.16 |
[HLSL]DepthTexture (0) | 2023.10.16 |
[HLSL]MainLight (0) | 2023.10.16 |