Get it on Google Play


Wm뮤 :: 'Unity' 카테고리의 글 목록 (8 Page)

블로그 이미지
가끔 그림그리거나 3D모델링하거나
취미로 로봇만드는
전자과 게임프로그래머 (퇴사함)
2022.3.22f1 주로 사용
모카쨩
@Ahzkwid

Recent Comment

Archive


'Unity'에 해당되는 글 184건

  1. 2022.01.13 Decal Shader
  2. 2022.01.12 shader pixel broken
  3. 2022.01.10 유니티 쉐이더 밉맵
  4. 2022.01.07 유니티 Compute Shader
  5. 2021.12.29 랜덤 쉐이더
  6. 2021.12.25 유니티 페이스북 인증 2021
  7. 2021.12.18 유니티 조인트
  8. 2021.12.16 유니티 프로퍼티 드로워
2022. 1. 13. 11:06 Unity/shader

 

 

 

 

스티커 쉐이더

팀포의 스프레이 같은걸 생각하면 된다

 

 

-프로젝터 기법

간단하면서 확실한 기법이다

장점

  -레이어 구분 가능

  -육안으로 적용된 지역 파악이 쉬움

  -높은 호환성 (기본컴포넌트니까)

  -Orthographic전환이 간편

단점

  -깊이가 너무 깊은면에 투과하는 문제

  -후면 비침문제

더보기

 

 

 스탠다드 에셋에서 프로젝터 쉐이더를 불러와야 하지만 스탠다드 에셋 지원이 끊겼다

 에셋스토어에서 잘 불러오거나 수동으로 만들자

 

 

 

 

 

Standard Assets\Effects\Projectors\Shaders\ProjectorLight.shader

// Upgrade NOTE: replaced '_Projector' with 'unity_Projector'
// Upgrade NOTE: replaced '_ProjectorClip' with 'unity_ProjectorClip'

Shader "Projector/Light" {
	Properties{
		_Color("Main Color", Color) = (1,1,1,1)
		_ShadowTex("Cookie", 2D) = "" {}
		_FalloffTex("FallOff", 2D) = "" {}
	}

		Subshader{
			Tags {"Queue" = "Transparent"}
			Pass {
				ZWrite Off
				ColorMask RGB
				Blend DstColor One
				Offset -1, -1

				CGPROGRAM
				#pragma vertex vert
				#pragma fragment frag
				#pragma multi_compile_fog
				#include "UnityCG.cginc"

				struct v2f {
					float4 uvShadow : TEXCOORD0;
					float4 uvFalloff : TEXCOORD1;
					UNITY_FOG_COORDS(2)
					float4 pos : SV_POSITION;
				};

				float4x4 unity_Projector;
				float4x4 unity_ProjectorClip;

				v2f vert(float4 vertex : POSITION)
				{
					v2f o;
					o.pos = UnityObjectToClipPos(vertex);
					o.uvShadow = mul(unity_Projector, vertex);
					o.uvFalloff = mul(unity_ProjectorClip, vertex);
					UNITY_TRANSFER_FOG(o,o.pos);
					return o;
				}

				fixed4 _Color;
				sampler2D _ShadowTex;
				sampler2D _FalloffTex;

				fixed4 frag(v2f i) : SV_Target
				{
					fixed4 texS = tex2Dproj(_ShadowTex, UNITY_PROJ_COORD(i.uvShadow));
					texS.rgb *= _Color.rgb;
					texS.a = 1.0 - texS.a;

					fixed4 texF = tex2Dproj(_FalloffTex, UNITY_PROJ_COORD(i.uvFalloff));
					fixed4 res = texS * texF.a;

					UNITY_APPLY_FOG_COLOR(i.fogCoord, res, fixed4(0,0,0,0));
					return res;
				}
				ENDCG
			}
	}
}

 

 

Standard Assets\Effects\Projectors\Shaders\ProjectorMultiply.shader

// Upgrade NOTE: replaced '_Projector' with 'unity_Projector'
// Upgrade NOTE: replaced '_ProjectorClip' with 'unity_ProjectorClip'

Shader "Projector/Multiply" {
	Properties{
		_ShadowTex("Cookie", 2D) = "gray" {}
		_FalloffTex("FallOff", 2D) = "white" {}
	}
		Subshader{
			Tags {"Queue" = "Transparent"}
			Pass {
				ZWrite Off
				ColorMask RGB
				Blend DstColor Zero
				Offset -1, -1
		 
				CGPROGRAM
				#pragma vertex vert
				#pragma fragment frag
				#pragma multi_compile_fog
				#include "UnityCG.cginc"

				struct v2f {
					float4 uvShadow : TEXCOORD0;
					float4 uvFalloff : TEXCOORD1;
					UNITY_FOG_COORDS(2)
					float4 pos : SV_POSITION;
				};

				float4x4 unity_Projector;
				float4x4 unity_ProjectorClip;

				v2f vert(float4 vertex : POSITION)
				{
					v2f o;
					o.pos = UnityObjectToClipPos(vertex);
					o.uvShadow = mul(unity_Projector, vertex);
					o.uvFalloff = mul(unity_ProjectorClip, vertex);
					UNITY_TRANSFER_FOG(o,o.pos);
					return o;
				}

				sampler2D _ShadowTex;
				sampler2D _FalloffTex;

				fixed4 frag(v2f i) : SV_Target
				{
					fixed4 texS = tex2Dproj(_ShadowTex, UNITY_PROJ_COORD(i.uvShadow));
					texS.a = 1.0 - texS.a;

					fixed4 texF = tex2Dproj(_FalloffTex, UNITY_PROJ_COORD(i.uvFalloff));
					fixed4 res = lerp(fixed4(1,1,1,0), texS, texF.a);

					UNITY_APPLY_FOG_COLOR(i.fogCoord, res, fixed4(1,1,1,1));
					return res;
				}
				ENDCG
			}
	}
}

 

Shader error in 'ProjectorMultiply': Parse error: syntax error, unexpected '-', expecting TVAL_VARREF or TVAL_NUMBER at line 15

문제가 발생하면 해당영역의 '-'글자를 수동으로 쳐주자

 

 

 

Cookie부분이 _MainTex와 동등한부분이다

 

 

아까만든 프로젝터에 마테리얼을 할당한다

 

 

그리고 투사하면...

 

 

 

개박살난다

 

표시영역보다 메쉬가 크면 나머지를 WrapMode에 따라 배치하기 때문

 

 

가장자리를 흰색으로 처리하는 방법

 

 WrapMode를 Clamp로 바꿔주자


이러면 이렇게 가장자리가 늘어지게 되는데 가장자리를 흰색으로 처리해준다

 

 

 

 

 

쉐이더를 수정하는 방법

fixed4 uv = UNITY_PROJ_COORD(i.uvShadow);
fixed4 texS = tex2Dproj(_ShadowTex, uv);
texS.a = 1.0 - texS.a;
if (!all(uv.xy==saturate(uv.xy)))
{
    texS.rgb = 1;
}

위 코드를 texS에 적용시킨다

 

 

적용된 모습

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'Unity > shader' 카테고리의 다른 글

함수 그래프 모음  (0) 2022.01.15
shader pixel broken  (0) 2022.01.12
유니티 쉐이더 밉맵  (0) 2022.01.10
posted by 모카쨩
2022. 1. 12. 12:32 Unity/shader

 

 

 

쉐이더 픽셀 깨짐현상

 

계산시 색이 바뀌는 구간에서 전혀 다른색이 들어가는 현상이다

각종 보간효과들이 들어가면서 발생하는 현상이다

 

 

사용된 연산식은 이렇다


int _BoardSize = 8;
float2 uv = (floor(i.uv * _BoardSize) + 0.5) / _BoardSize;
col= tex2D(_MainTex, uv);

 

보간효과들을 꺼주면 된다

둘중하나라도 켜져있으면 발생하니 주의

 

 

 

 

 

 

 

수정된모습

 

 

밉맵이야 그렇다 쳐도 Bilinear연산이 빠지는건 타격이 꽤 크다

경우에 따라 밉맵만 꺼도 티가 잘 안나는 경우가 있으니 상황에 따라 맞게 사용할것

 

'Unity > shader' 카테고리의 다른 글

Decal Shader  (0) 2022.01.13
유니티 쉐이더 밉맵  (0) 2022.01.10
유니티 Compute Shader  (0) 2022.01.07
posted by 모카쨩
2022. 1. 10. 16:17

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2022. 1. 7. 11:29

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2021. 12. 29. 23:34 Unity/shader

 

 

 

https://www.shadertoy.com/view/4djSRW

 

Shadertoy

 

www.shadertoy.com

더보기

hashOld12의 패턴

float hashOld12(float2 p)
{
    return sin(dot(p, float2(100, 100)));
}

 

 

 

hash12의 패턴

float hash12(float2 p)
{
    float3 p3 = sin(float3(p.xyx) );
    p3 += dot(p3, p3.yzx );
    return sin((p3.x + p3.y) * p3.z);
}

편향랜덤이라서 안 쓰는게 좋을듯

 

 

 

 

 

 

 

 

 

noise(floatM|halfM|min10floatM|min16floatM)

'Unity > shader' 카테고리의 다른 글

유니티 Compute Shader  (0) 2022.01.07
유니티 코드없이 Invisible 사용하기 (마스크 거꾸로 사용)  (0) 2021.08.17
Depth 쉐이더  (0) 2021.06.12
posted by 모카쨩
2021. 12. 25. 13:00

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2021. 12. 18. 20:51 Unity

 

 

CharacterJoint

 

-Axis 0,1,0 기준

LowTwistLimit : pitchLimitLow

HighTwistLimit : pitchLimitHigh

Swing1Limit : yawLimit 

Swing2Limit: rollLimit

 

 

 

 

'Unity' 카테고리의 다른 글

유니티 페이스북 인증 2021  (0) 2021.12.25
유니티 프로퍼티 드로워  (0) 2021.12.16
디버그로그 음소거  (0) 2021.12.13
posted by 모카쨩
2021. 12. 16. 16:39 Unity

https://docs.unity3d.com/kr/2021.3/Manual/editor-PropertyDrawers.html

 

프로퍼티 드로어 - Unity 매뉴얼

프로퍼티 드로어는 스크립트에서 속성을 사용하거나 특정 Serializable 클래스가 표시되어야 하는 방법을 제어하여 인스펙터(Inspector) 창 에 특정 컨트롤이 표시되는 방법을 커스터마이즈할 때 사

docs.unity3d.com

 

공식 매뉴얼

 

비슷한것으론 DecoratorDrawer가 있다

 

 

 

 

 

 

 

 

[ReadOnly] 로 사용

이건 내가 만든게 아니다

원문링크 : https://discussions.unity.com/t/how-to-make-a-readonly-property-in-inspector/75448



using System.Collections;
using System.Collections.Generic;
using UnityEngine;

#if UNITY_EDITOR
using UnityEditor;
[CustomPropertyDrawer(typeof(ReadOnlyAttribute))]
public class ReadOnlyDrawer : PropertyDrawer
{
    public override float GetPropertyHeight(SerializedProperty property,GUIContent label)
    {
        return EditorGUI.GetPropertyHeight(property, label, true);
    }

    public override void OnGUI(Rect position,SerializedProperty property,GUIContent label)
    {
        GUI.enabled = false;
        {
            EditorGUI.PropertyField(position, property, label, true);
        }
        GUI.enabled = true;
    }
}

#endif
public class ReadOnlyAttribute : PropertyAttribute
{

}

 

 

 

 

이걸로 다중배열은 안 되니 뻘짓하지 말자

왜냐면 배열은 프로퍼티드로워는 OnGUI에서 하위 항목만 접근 가능하고

다중배열은 접근불가하게 원천으로 차단해버린다

 

 

 

 

 

그리고 이걸로 버튼 어트리뷰트 만들어볼려고 했는데 필드에만 선언이 되어서

ContextMenu로 대체했다

자세한건 어트리뷰트 참고

 

https://wmmu.tistory.com/entry/%EC%9C%A0%EB%8B%88%ED%8B%B0-%EC%BB%A4%EC%8A%A4%ED%85%80-%EC%9D%B8%EC%8A%A4%ED%8E%99%ED%84%B0-%EC%8B%AC%ED%94%8C%ED%83%80%EC%9E%85

 

유니티 어트리뷰트

인스펙터계열 어트리뷰트 //해당 변수가 어떤 역할인지 위에 굵은 글씨로 표시해줌 [Header("헤더이름")] //슬라이더로 표시해줌 [Range(0.5f,1.5f)] //슬라이더바가 있는 멀티라인 [TextArea(1,30)] public strin

wmmu.tistory.com

 

 

 

 

그리고 툴 만들다가 드로워로 클래스별 인스펙터를 구현할 일이 있어서 만들었다

몰론 바로 폐기되었지만 언젠가 또 쓸일이 있을듯

기능제약은 심하지만 간결해서 빠르게 작성할수 있다는점이 좋다

이 코드는 https://github.com/ahzkwid/AhzkwidAvatarTools 이곳에 잠깐 사용되었다가 삭제되었다

#if UNITY_EDITOR
    using UnityEditor;
    using UnityEditorInternal;



    [CustomPropertyDrawer(typeof(BlendshapeSettingDataAttribute))]
    public class BlendshapeSettingDataDrawer : PropertyDrawer
    {
        public override void OnGUI(Rect rect, SerializedProperty property, GUIContent label)
        {
            var fieldRect = rect;
            fieldRect.width /= 2;
            {
                var path = nameof(BlendshapeAutoSetter.BlendshapeSettingData.name);
                EditorGUI.PropertyField(fieldRect, property.FindPropertyRelative(path), new GUIContent(path), true);
            }


            fieldRect.x += fieldRect.width;
            EditorGUI.PropertyField(fieldRect, property.FindPropertyRelative(nameof(BlendshapeAutoSetter.BlendshapeSettingData.value)), label, true);
        }
    }
    public class BlendshapeSettingDataAttribute : PropertyAttribute
    {

    }
#endif





    public class BlendshapeAutoSetter : MonoBehaviour
{
    [System.Serializable]
    public class BlendshapeSettingData
    {
        public string name;
        [Range(0,100)]
        public float value = 100;
    }
    [System.Serializable]
    public class BlendshapeTarget
    {
        public Mesh mesh;
        [BlendshapeSettingData]
        public List<BlendshapeSettingData> blendshapeValues;
        //public Dictionary<string,float> keyValuePairs = new Dictionary<string,float>();
    }

        bool success = false;

        public bool autoDestroy = true;

        public List<BlendshapeTarget> blendshapeTargets = new List<BlendshapeTarget>();
        }

 

 

 

 

'Unity' 카테고리의 다른 글

유니티 조인트  (0) 2021.12.18
디버그로그 음소거  (0) 2021.12.13
래그돌  (0) 2021.12.04
posted by 모카쨩

저사양 유저용 블로그 진입