상세 분해 Unity 는 Particle System 입자 시스템 시 뮬 레이 션 약물 을 사용 하여 혈관 에서 흐른다(입자 충돌)

머리말
길 을 잃 지 않 고 지속 적 인 수출Unity건어물 글 에 관심 을 가 집 니 다.
안녕하세요.
전에 나 는Unity유체 시 뮬 레이 션 글 을 한 편 썼 다.Unity 유체 시 뮬 레이 션,입자 시스템 지원,유체 충돌 상호작용 지원(Obi Fluid 플러그 인 사용 강좌
그리고 어떤 친구 가 나 에 게 약 제 를 만들어 혈관 에 넣 는 효 과 를 물 었 다.
在这里插入图片描述
글 쎄 요.ObiFluid로 할 수 있 지만 제 가 오늘 시도 해 볼 것 은 다른 방식 으로 하 는 것 입 니 다.Unity의 입자 시스템 을 직접 사용 해서 하 는 것 입 니 다.
최종 효과
최종 효 과 는 다음 과 같다.효 과 는 보통 이지 만 제 도 는 상대 적 으로 간단 하 다.
在这里插入图片描述
본 논문Demo공 사 는 이미CodeChina에 올 랐 고 관심 이 있 는 학생 들 은 스스로 다운로드 하여 공부 할 수 있다.
주소:https://codechina.csdn.net/linxinfa/UnityParticleFluidDemo
주:내 가 사용 하 는 유 니 티 버 전:Unity 2020.1.14f1c1 (64-bit).
在这里插入图片描述
3.제작 과정
 1.혈관 모형 도입
혈관 모형 을 공사 에 도입 하 다.
在这里插入图片描述
2.혈관 셰 이 더
우 리 는 혈관 을 통 해 약물 이 흐 르 는 것 을 볼 필요 가 있 기 때문에 혈관 은 반투명 표시 가 필요 하 다.우 리 는 이곳 에shader를 만들어 반투명 효 과 를 실현 해 야 한다.
在这里插入图片描述 shader코드 는 다음 과 같다.

Shader "linxinfa/CustomTransShader" {
	Properties {
		_Color ("Main Tint", Color) = (1,1,1,1)
		_MainTex ("Main Tex", 2D) = "white" {}
		_AlphaScale("Alpha Scale",Range(0,1)) = 1
	}
	SubShader {
		Tags{"Queue" = "AlphaTest" "IgnoreProjector" = "True" "RenderType" = "Transparent"}
 
		Pass
		{
			Tags{"LightMode" = "ForwardBase"}
 
			Cull Front
 
			ZWrite Off
			Blend SrcAlpha OneMinusSrcAlpha
 
 
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			#include "Lighting.cginc"
			#include "UnityCG.cginc"
 
			fixed4 _Color;
			sampler2D _MainTex;
			float4 _MainTex_ST;
			fixed _AlphaScale;
 
			struct a2v
			{
				float4 vertex : POSITION;
				float3 normal : NORMAL;
				float4 texcoord : TEXCOORD0;
			};
 
			struct v2f
			{
				float4 pos : SV_POSITION;
				float3 worldNormal : TEXCOORD0;
				float3 worldPos : TEXCOORD1;
				float2 uv : TEXCOORD2;
			};
 
			v2f vert(a2v v)
			{
				v2f o;
				o.pos = UnityObjectToClipPos(v.vertex);
				o.worldNormal = UnityObjectToWorldNormal(v.normal);
				o.worldPos = mul(unity_ObjectToWorld,v.vertex).xyz;
 
				o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);
 
				return o;
 
			}
 
			fixed4 frag(v2f i) : SV_TARGET0
			{
				fixed3 worldNormal = normalize(i.worldNormal);
				fixed3 worldLightDir = normalize(UnityWorldSpaceLightDir(i.worldPos));
 
				fixed4 texcolor = tex2D(_MainTex,i.uv);
 
				fixed3 albedo = texcolor.rgb * _Color.rgb;
				fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz * albedo;
				fixed3 diffues = _LightColor0.rgb * albedo * max(0,dot(worldNormal,worldLightDir));
 
				return fixed4(ambient + diffues,texcolor.a * _AlphaScale);
			}
 
 
 
 
 
			ENDCG
		}
 
 
		Pass
		{
			Tags{"LightMode" = "ForwardBase"}
 
			Cull Back
 
			ZWrite Off
			Blend SrcAlpha OneMinusSrcAlpha
 
 
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			#include "Lighting.cginc"
			#include "UnityCG.cginc"
 
			fixed4 _Color;
			sampler2D _MainTex;
			float4 _MainTex_ST;
			fixed _AlphaScale;
 
			struct a2v
			{
				float4 vertex : POSITION;
				float3 normal : NORMAL;
				float4 texcoord : TEXCOORD0;
			};
 
			struct v2f
			{
				float4 pos : SV_POSITION;
				float3 worldNormal : TEXCOORD0;
				float3 worldPos : TEXCOORD1;
				float2 uv : TEXCOORD2;
			};
 
			v2f vert(a2v v)
			{
				v2f o;
				o.pos = UnityObjectToClipPos(v.vertex);
				o.worldNormal = UnityObjectToWorldNormal(v.normal);
				o.worldPos = mul(unity_ObjectToWorld,v.vertex).xyz;
 
				o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);
 
				return o;
 
			}
 
			fixed4 frag(v2f i) : SV_TARGET0
			{
				fixed3 worldNormal = normalize(i.worldNormal);
				fixed3 worldLightDir = normalize(UnityWorldSpaceLightDir(i.worldPos));
 
				fixed4 texcolor = tex2D(_MainTex,i.uv);
 
				fixed3 albedo = texcolor.rgb * _Color.rgb;
				fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz * albedo;
				fixed3 diffues = _LightColor0.rgb * albedo * max(0,dot(worldNormal,worldLightDir));
 
				return fixed4(ambient + diffues,texcolor.a * _AlphaScale);
			}
 
			ENDCG
 
	}
	}
		FallBack "Transparent/VertexLit"
}
3.혈관 재질 공
재질 공 을 만 들 고 방금CustomTransShader.shader을 사용 합 니 다.
在这里插入图片描述
그리고 재질 구 를 혈관 모형 에 미리 설치 하면 반투명 한 혈관 이 만들어 진다.
在这里插入图片描述
4.충돌 체 추가
약물 은 혈관 에서 흐 르 기 때문에 충돌 이 발생 해 야 하기 때문에 혈관 은 충돌 체 를 첨가 해 야 한다.MeshCollider.
在这里插入图片描述
5.물약 입자
물약 입 자 는 사실 보통 입자 다.
在这里插入图片描述
가장 관건 적 인 것 은 입자 의Collision속성 을 켜 면 입자 가 혈관 벽 과 부 딪 힐 수 있다 는 것 이다.
在这里插入图片描述
그 중 일부 인자:
Dampen:저항력
바 운 스:탄력
Lifetime Loss:손실률
최소 사망 속도:최소 사망 속도
최대 킬 속도:최대 사망 속도
Radius Scale:반경 크기 를 조정 하면 입자 가 충돌 하지 않 고 충돌 할 수 있 습 니 다.
4.테스트 효과
최종 운행Unity,테스트 효 과 는 다음 과 같 습 니 다.
在这里插入图片描述
종결 어
이상 입 니 다.
유 니 티 가 파 티 클 시스템 입자 시스템 을 사용 하여 혈관 에서 흐 르 는 모 의 약물(입자 충돌)에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.유 니 티 파 티 클 시스템 입자 시스템 에 관 한 더 많은 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기