Post Processing Stack과 컨투어 셰이더를 함께 사용하여 컨투어를 빛냅니다.
먼저 카메라에 연결할 윤곽 셰이더와 스크립트를 준비합니다.
셰이더의 Color 지정을 HDR로 하려면
[HDR]
Attribute를 붙여,스크립트 측의 Inspector에서 HDR Color를 변경하려면
[ColorUsage(true, true, 0f, 5f, 0.2f, 2f)]
와 같이 ColorUsageAttribute를 지정합니다.ScreenDepth.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace MyDepthDemo{
[ExecuteInEditMode]
public class ScreenDepth : MonoBehaviour {
[SerializeField] Material m_DepthRenderMat;
void OnRenderImage(RenderTexture src, RenderTexture dest)
{
Graphics.Blit (src, dest,m_DepthRenderMat);
}
}
}
ScreenEdgeEmitShader.shader
Shader "Custom/ScreenEdgeEmitShader" {
Properties
{
_MainTex ("Texture", 2D) = "white" {}
[HDR] _Color ("Emission Color", Color) = (0,0,0)
_EdgeWidth ("Edge Width", Range(0, 10)) = 1
_Sensitivity ("Depth Sensitivity", Range(0, 10)) = 1
}
CGINCLUDE
#include "UnityCG.cginc"
sampler2D _MainTex;
sampler2D_float _CameraDepthTexture;
float4 _Color;
float _EdgeWidth;
float _Sensitivity;
struct v2f {
float2 uv : TEXCOORD0;
};
float edgeCheck(float2 i_uv){
float2 txSize = 1/_ScreenParams.xy*_EdgeWidth;
float2 base_uv = i_uv - txSize*0.5;
float2 uv0 = base_uv;
float2 uv1 = base_uv + txSize.xy;
float2 uv2 = base_uv + float2(txSize.x, 0);
float2 uv3 = base_uv + float2(0, txSize.y);
// Convert to linear depth values.
float z0 = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv0));
float z1 = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv1));
float z2 = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv2));
float z3 = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv3));
// Roberts cross operator
float zg1 = z1 - z0;
float zg2 = z3 - z2;
return saturate(sqrt(zg1 * zg1 + zg2 * zg2)*_Sensitivity);
}
fixed4 frag (v2f i, UNITY_VPOS_TYPE screenPos : VPOS) : SV_Target
{
float z0 = edgeCheck(screenPos.xy/(_ScreenParams.xy));
fixed4 c = tex2D (_MainTex, i.uv);
c.rgb += z0*_Color.rgb;
return c;
}
ENDCG
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 100
ZTest Always Cull Off ZWrite Off
Pass
{
CGPROGRAM
#pragma vertex vert_img
#pragma fragment frag
#pragma target 3.0
ENDCG
}
}
}
위의 셰이더가 적용된 머티리얼을 만들고 스크립트와 함께 카메라에 연결합니다.
카메라의 AllowHDR을 선택하고 연결할 위치는 PostProsessingBehaviour보다 높아야 합니다.
엣지가 나오는 것은 모두 빛나 버리므로 (Unlit나 반투명은 빛나지 않습니다) 사용소는 어려울 것 같습니다만, 카메라의 방향에 맞추어 Color를 변화시켜 주면 에모인 씬에 사용할 수 있을지도?
비슷한 방식으로 전체 화면이 아닌 모형에 모서리를 내는 방법은 여기입니다.
Reference
이 문제에 관하여(Post Processing Stack과 컨투어 셰이더를 함께 사용하여 컨투어를 빛냅니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ELIXIR/items/94735e9f9336caf773f9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)