Unity – cómo hacer material de doble cara
– UnityAssets3Free
buenas , soy josel luis y aqui os traigo
esta nueva pregunta
Buscar el problema da varias soluciones, pero por alguna razón no funcionan en mi Unity3D 5.4. Como una cámara dentro de una esfera.
yo no veo cull
y/o sides
en material en el editor de Unity. En c#
rend = GetComponent<Renderer>();
mater = rend.material;
rend.setFaceCulling( "front", "ccw" );
mater.side = THREE.DoubleSide;
no funciona setFaceCulling
y side
propiedad.
¿Cómo hacer material de doble cara?
6 respuestas 6
Necesita un sombreador personalizado para activar el material de doble cara usando Cull Off
La forma más fácil/rápida de probar es crear una nueva Standard Surface Shader
en el editor y ábrelo. agregar la línea Cull Off
Abajo de LOD 200
.
Ahora, una cosa a considerar es que los rayos no se renderizarán correctamente para las caras posteriores. Si quieres eso, recomendaría hacer modelos con 2 lados.
Usa o crea un shader con
Para eliminar
Visto aquí en este sombreador simple de 2 lados:
Shader "Custom/NewSurfaceShader"
Properties
SubShader
Cull off
Pass
ColorMaterial AmbientAndDiffuse
Tal vez mi respuesta para su versión de Unity no funcione, pero aquí hay una solución para las versiones más nuevas de HDRP en la imagen a continuación.
solo crea uno Borrador y editar:
Deberías escribir Cull off
por debajo de LOD 100, arrástrelo a un nuevo material y configure una imagen de prueba; ahora arrastre el material a un objeto. ¡El rayo se renderizará correctamente! ( mi unity es 2019.4)
enter code here
Shader "Unlit/unlit"
Properties
_MainTex ("Texture", 2D) = "white"
SubShader
Tags "RenderType"="Opaque"
LOD 100
Cull off
Pass
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_fog
#include "UnityCG.cginc"
struct appdata
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
;
struct v2f
float2 uv : TEXCOORD0;
UNITY_FOG_COORDS(1)
float4 vertex : SV_POSITION;
;
sampler2D _MainTex;
float4 _MainTex_ST;
v2f vert (appdata v)
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
UNITY_TRANSFER_FOG(o,o.vertex);
return o;
fixed4 frag (v2f i) : SV_Target
// sample the texture
fixed4 col = tex2D(_MainTex, i.uv);
// apply fog
UNITY_APPLY_FOG(i.fogCoord, col);
return col;
ENDCG
Puede usar un sombreador de superficie personalizado con Para eliminar pero las caras opuestas no recibirán la luz adecuada, ya que las normales son válidas solo para las caras delanteras, para las caras traseras las normales son opuestas a las caras. Si desea que la cara posterior se trate como la cara frontal y no quiere hacer un modelo con malla de doble cara para consumir doble memoria, puede dibujar en 2 pasa1 Pasar para la cara frontal y 1 para la cara posterior, donde puedes invertir la normal para cada vértice en sombreador de vértices. Usted puede utilizar Apártate y frente de matanza.
SubShader
//Here start first Pass, if you are using standard surface shader passes are created automated,
//else you should specify Pass
Tags ...
LOD 200
Cull Back
...
struct Input
...
...
...
//or vert & frag shaders
void surf(Input IN, inout SurfaceOutputStandard p)
//processing front face, culling back face
...
...
//Here start second pass put automated by unity
Tags ...
LOD 200
Cull Front
#pragma vertex vert
#pragma surface ...
...
struct Input
...
...
void vert(inout appdata_full v)
v.normal = -v.normal;//flip
void surf(Input IN, inout SurfaceOutputStandard p)
//processing back face, culling front face
...
Además, en Unity 2020.3, el sombreador URP/Lit tiene una opción de renderizar cara.
nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias
eso es todo,espero que te halla servido