Sistema de tela Unity3D y restricción de tela y renderizado de malla a doble cara

¿Cómo lograr el efecto ondeante de la bandera de tela en Unity3D? Como se muestra abajo:

Inserte la descripción de la imagen aquí

1. Cómo utilizar el sistema de telas

1. Agregue el componente Cloth,
aquí tomamos el plano como ejemplo.
Después de generar el plano plano en la escena, agregue el componente Cloth, y aparecerán los componentes Skinned Mesh Renderer y Cloth, como se muestra en la figura siguiente.

Inserte la descripción de la imagen aquí
2. Agregue vértices y controle que el material se mueva de acuerdo con este punto

Haga clic en el botón de abajo para abrir el modo Editar restricción de tela,

Inserte la descripción de la imagen aquí
Haga clic en Seleccionar, seleccione algunos de los puntos como vértices, puede hacer clic directamente en los puntos negros para seleccionar, presione Mayús para seleccionar varios o use el botón izquierdo del mouse para encuadrar la selección, como se muestra en la figura:
(Si desea establecer el vértices con valores actuales a Sin restricciones (puntos libres)), solo necesita seleccionar aquellos vértices con valores numéricos y luego desmarcar las casillas de verificación correspondientes) Después de
Inserte la descripción de la imagen aquí
seleccionar algunos puntos negros, puede encontrar que los puntos negros se vuelven más brillantes. Marque la casilla frente a Distancia máxima.
Inserte la descripción de la imagen aquí
Corre, puedes ver que el avión flota como una tela, pero los puntos seleccionados no se mueven.

2. Configuración de atributos del sistema de tela Cloth

Inserte la descripción de la imagen aquí
La traducción es la siguiente:

Inserte la descripción de la imagen aquí
Estos son algunos de los atributos más utilizados:

1. Utilice la gravedad

Ya sea para usar la gravedad mundial, cuando se marca, el material se combará con la gravedad.

Inserte la descripción de la imagen aquí

2. Amortiguación

La amortiguación se aplica a cada vértice de la tela. Para crear una tela que parezca menos o más nerviosa, puede establecer esta propiedad.Inserte la descripción de la imagen aquí

3. El grado de tracción y flexión de la tela.

Rigidez de estiramiento: Rigidez de estiramiento Rigidez de
flexión: Rigidez de flexión.

4 、 Utilice colisión continua

El uso de Continuous Collision aumenta el consumo, reduce la posibilidad de penetración directa y colisión y aumenta la sobrecarga del sistema.

5. Agregar cuerpo de colisión

Colisionadores de cápsulas: colisionadores de cápsulas para interactuar con la tela.
Sphere Colliders: ClothSphereCollider Se empareja para interactuar con la tela. Se puede entender que viene en un grupo. Solo puede haber una SphereCollider o dos en un grupo. Cuando hay dos, entonces las dos SphereColliders estarán en El sistema de colisión de tela es "Soldado" Esto permite que dos SphereColliders de diferentes tamaños se combinen en un cuerpo de colisión cónico.
En cuanto al cuerpo de colisión, se puede colocar en el subobjeto, espontáneo o externo de Cloth.

Inserte la descripción de la imagen aquí

6, panel de edición sin restricciones de tela

Inserte la descripción de la imagen aquí

La distancia máxima puede establecer la distancia máxima móvil de cada vértice. El uso más común es establecer la distancia máxima de los vértices inamovibles en 0

Surface Penetration controla la extensión máxima en la que los vértices se pueden incrustar en la malla. La diferencia se puede comparar claramente cuando los vértices de la malla de tela son relativamente escasos.

Visualización Aquí puede elegir si desea obtener una vista previa de la distancia máxima o la penetración de la superficie en la vista de escena (elija una de las dos), y también puede elegir si desea que la operación afecte los vértices en la parte posterior de la ventana gráfica.

En el modo de edición Seleccionar, debe seleccionar varios vértices por selección de cuadro, o Mayús + clic para seleccionar vértices, y luego marcar la casilla frente a Distancia máxima o Penetración de superficie, lo que significa que quiero cambiar el valor del seleccionado vértices ahora! Luego en la parte posterior Ingrese el valor deseado en el valor.

Para establecer los vértices con los valores actuales en Sin restricciones, simplemente seleccione esos vértices con valores y desmarque las casillas de verificación correspondientes.

3. Precauciones para el uso del sistema de telas

1. Cloth solo se puede usar con Skinned Mesh Renderer, pero esto no significa que cuando uses objetos simples, también debas exportar un FBX con información de skin en Max. De hecho, puedes crear un nuevo GameObject y asignar el componente Cloth, que agregará automáticamente el componente Renderizador de malla con piel, y luego asignará la malla básica al componente Renderizador de malla con piel y establecerá el material correcto. La tela puede aceptar influencias externas, pero no la asignará en absoluto al cuerpo rígido externo, es decir, la simulación física del sistema de la tela es unidireccional.

2. La tela no reaccionará a todos los objetos que chocan en la escena, ni aplicará fuerza al mundo. Cuando se agrega, el componente de tela no reaccionará ni afectará a ningún otro cuerpo. Por lo tanto, la tela y el mundo no se reconocerán ni se verán hasta que agregue manualmente el colisionador del mundo al componente de tela. Incluso después de eso, la simulación sigue siendo unidireccional: la tela reacciona a estos objetos pero no aplica fuerza.

3. Solo puedes usar tres tipos de colisionadores para la tela: esfera, cápsula y cápsula cónica para colisionar con dos colisionadores de bolas. Todas estas limitaciones ayudan a mejorar el rendimiento.

La matriz de colisionador de esferas puede contener una única instancia válida de SphereCollider (la segunda está vacía) o un par. En el primer caso, ClothSphereColliderPair solo representa un colisionador de esfera única para la colisión de telas. En el último caso, representa una forma de cápsula cónica definida por dos esferas, y el cono conecta las dos esferas. La forma de cápsula cónica es útil para simular las extremidades de un personaje.

4. Reponga bulabulabula más tarde. . .

Cuatro, renderizado de material de doble cara Shader

Debido a que Unity necesita usar un sombreador de pantalla de doble cara dedicado para hacer que el modelo sea una pantalla de doble cara de una sola cara, es necesario modificar el sombreador.

1. Uso compartido de plantillas de material de doble cara

Puede descargar la plantilla de material de doble cara directamente a través de este enlace: https://download.csdn.net/download/qq_43505432/13121760

Después de importar la unidad, arrastre el sombreador directamente al material especificado para cambiar el material de una cara a doble cara.
Inserte la descripción de la imagen aquí

En segundo lugar, el método de fabricación de materiales de doble cara.

1. Mismo material simple de doble cara

Cree un nuevo archivo de Shader o descargue la plantilla directamente, ábrala con un editor de texto (Sublime Text, Bloc de notas, etc.), copie el siguiente código y luego arrastre este sombreador en Unity al material especificado para hacer el material de una sola cara convertirse en de doble cara.

Este método consiste en agregar una instrucción Cull off al código Shader para lograr una representación forzada de doble cara.

Shader "Double Face/Bumped Specular" {
    
    
Properties {
    
    
	_Color ("Main Color", Color) = (1,1,1,1)
	_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
	_Shininess ("Shininess", Range (0.03, 1)) = 0.078125
	_MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {
    
    }
	_BumpMap ("Normalmap", 2D) = "bump" {
    
    }
}
SubShader {
    
     
	Tags {
    
     "RenderType"="Opaque" }
	LOD 400
Cull Off	
CGPROGRAM
#pragma surface surf BlinnPhong

sampler2D _MainTex;
sampler2D _BumpMap;
float4 _Color;
float _Shininess;

struct Input {
    
    
	float2 uv_MainTex;
	float2 uv_BumpMap;
};

void surf (Input IN, inout SurfaceOutput o) {
    
    
	half4 tex = tex2D(_MainTex, IN.uv_MainTex);
	o.Albedo = tex.rgb * _Color.rgb;
	o.Gloss = tex.a;
	o.Alpha = tex.a * _Color.a;
	o.Specular = _Shininess;
	o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
}
ENDCG
}

FallBack "Specular"
}

2. Materiales de doble cara con diferentes efectos.

Existe una falla importante en el uso directo de Cull off. Este material se ve exactamente igual independientemente de su textura, color, reflejo e iluminación de ambos lados, lo que no cumple con el sentido común de la mayoría de situaciones prácticas.

¿Cómo lograr diferentes efectos en ambos lados?
Como se mencionó anteriormente, el sombreador de superficie no puede escribir dos pasadas para renderizar superficies diferentes, pero de hecho, el método de superficie puede escribir múltiples procesos de renderizado, sin el concepto de paso en absoluto. El sombreador de superficie se puede escribir así:

Devolver la llamada Reproducir el código de
frente Llamar al frente Reproducir el código de respaldo

Se pueden realizar diferentes controles en ambos lados.

De acuerdo con este principio, de hecho, solo necesitamos copiar el código fuente del sombreador incorporado del sistema para lograr diferentes efectos en el otro lado.

Shader "Hog's shaders/BumpSpec_Twoside" {
    
    
Properties {
    
    
//正面5个参数
     _Color ("Main Color", Color) = (1,1,1,1)
     _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
     _Shininess ("Shininess", Range (0.03, 1)) = 0.078125
     _MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {
    
    }
     _BumpMap ("Normalmap", 2D) = "bump" {
    
    }
//反面拷贝 改名 也是5个
     _BackColor ("Back Main Color", Color) = (1,1,1,1)
     _BackSpecColor ("Back Specular Color", Color) = (0.5, 0.5, 0.5, 1)
     _BackShininess ("Back Shininess", Range (0.03, 1)) = 0.078125
     _BackMainTex ("Back Base (RGB) Gloss (A)", 2D) = "white" {
    
    }
     _BackBumpMap ("Back Normalmap", 2D) = "bump" {
    
    }
}
SubShader {
    
    
Tags {
    
     "RenderType"="Opaque" }
     LOD 400
     Cull back
//开始渲染正面   
CGPROGRAM
//表明是surface渲染方式 主渲染程序是surf 光照模型是BLinnPhong
#pragma surface surf BlinnPhong 
 
 
sampler2D _MainTex;
sampler2D _BumpMap;
fixed4 _Color;
half _Shininess;
 
struct Input {
    
    
     float2 uv_MainTex;
     float2 uv_BumpMap;
};
 
void surf (Input IN, inout SurfaceOutput o) {
    
    
     fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);
     o.Albedo = tex.rgb * _Color.rgb;
     o.Gloss = tex.a;
     o.Alpha = tex.a * _Color.a;
     o.Specular = _Shininess;
     o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));}
ENDCG
 
 
     Cull front
//开始渲染反面 其实和就是拷贝了一份正面渲染的代码 除了变量名要改   
CGPROGRAM
#pragma surface surf BlinnPhong
 
sampler2D _BackMainTex;
sampler2D _BackBumpMap;
fixed4 _BackColor;
half _BackShininess;
 
struct Input {
    
    
     float2 uv_BackMainTex;
     float2 uv_BackBumpMap;
};
 
void surf (Input IN, inout SurfaceOutput o) {
    
    
     fixed4 tex = tex2D(_BackMainTex, IN.uv_BackMainTex);
     o.Albedo = tex.rgb * _BackColor.rgb;
     o.Gloss = tex.a;
     o.Alpha = tex.a * _BackColor.a;
     o.Specular = _BackShininess;
     o.Normal = UnpackNormal(tex2D(_BackBumpMap, IN.uv_BackBumpMap));}
ENDCG
}
FallBack "Specular"
}

Este es un material de relieve de doble cara que se puede especificar por separado. Preste atención a varios puntos:

1. La parte de propiedades solo puede aparecer una vez, por lo que no se puede copiar directamente. Debido a que necesita especificar diferentes parámetros para el de doble cara, los nombres de las variables de parámetro de doble cara no deben ser los mismos. Este foro está lleno de programadores, por lo que no hay necesidad de explicar. Simplemente agregué un Atrás al frente de los cinco parámetros utilizados para el frente.

2. Los parámetros correspondientes también deben aplicarse en el código CG El código de renderizado en el reverso usa los 5 parámetros con Back recién agregado.

3. El segmento de código positivo comienza con Cull back y el código negativo comienza con Cull al frente.

4. Por lo general, no use materiales de doble cara en cada vuelta, ya que aumentará la carga del sistema y solo debe usarse donde sea necesario.

Supongo que te gusta

Origin blog.csdn.net/qq_43505432/article/details/109735723
Recomendado
Clasificación