Solve 'self overlap' with transparent 3D objects

Abierto
#48 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
25/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
unity

Línea de trabajo

Empieza revisando la documentación enlazada de Unity depth, transparent shader y SetShaderPassEnabled, y después compara las restricciones de las pipelines URP y built-in descritas en el issue. Se considera terminado cuando una malla transparente no convexa evita la superposición consigo misma en ambas pipelines, mientras que cualquier depth pass adicional permanece deshabilitado de forma predeterminada.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

enhancement

Describe the problem

Usually semitransparent shaders do not write into the depth buffer. However, this can create draw order problems, especially with complex non-convex meshes. If you want to fade in & out meshes like that, then using a shader that fills in the depth buffer before rendering transparency might be useful.

image

Semitransparent object; left: standard Transparent/Diffuse shader; right: shader that writes to depth buffer.

Describe the solution you'd like

Unity recomends a solution like below: https://docs.unity3d.com/2017.2/Documentation/Manual/SL-CullAndDepth.html

Shader "Transparent/Diffuse ZWrite" {
Properties {
    _Color ("Main Color", Color) = (1,1,1,1)
    _MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
}
SubShader {
    Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
    LOD 200

    // extra pass that renders to depth buffer only
    Pass {
        ZWrite On
        ColorMask 0
    }

    // paste in forward rendering passes from Transparent/Diffuse
    UsePass "Transparent/Diffuse/FORWARD"
}
Fallback "Transparent/VertexLit"
}

But! Multi-pass shaders are not supported by URP. There are some alternatives like using the draw objects render pass with light tags. But we'll need to find a solution that works for both URP and built-in pipelines.

Describe alternatives you've considered

n/a

Additional context

Original issue: https://github.com/microsoft/MixedRealityToolkit-Unity/issues/6285

If adding an extra depth pass we need to ensure it's not enabled by default. This API might be able to do that? But it is still unclear.

Lenguaje dominante
C#
Estrellas
209
Forks
49
Métricas de merge de PR
Sin PR fusionados en 30 d

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de microsoft/MixedReality-GraphicsTools-Unity

Todos los issues de microsoft/MixedReality-GraphicsTools-Unity

Issues similares

Más issues de C#

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.