bonjour,
Voici un shader grid 2D réaliser avec le Shader Graph,luminescent et transparent,appliqué sur un plan:
et une grille 3D trouvée sur internet:
Mon but est:
à partir d'un grand cube (1 seul objet),est-il possible de créer un shader volumétrique alliant les 2 images précédentes et à placer dans un cube?
Si oui,comment?
merci de votre aide
shader grid transparent volumétrique ?
- Kaloverian
- Messages : 345
- Inscription : 10 Août 2016 03:03
- boubouk50
- ModoGenereux
- Messages : 6262
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: shader grid transparent volumétrique ?
Tu veux créer une grille 3D avec un cube et un shader ?
C'est possible, mais ce sont des maths pas simples.
Le plus simple est de créer ta grille à partir de plans et d'un shader 2D de grille.
C'est possible, mais ce sont des maths pas simples.
Le plus simple est de créer ta grille à partir de plans et d'un shader 2D de grille.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
- Kaloverian
- Messages : 345
- Inscription : 10 Août 2016 03:03
Re: shader grid transparent volumétrique ?
J'ai demandé à chatgpt de me coder un script C# pour réaliser une texture 3D selon mon souhait initial.
Voici le code retourné:
J'ai insérer ce script sur un cube dépourvu de matérial et ça n'a rien donné !
Pourquoi cela?
Voici le code retourné:
Code : Tout sélectionner
using UnityEngine;
public class GridTextureGenerator : MonoBehaviour
{
public int width = 64;
public int height = 64;
public int depth = 64;
public float cellSize = 10.0f;
public float lineWidth = 2.0f;
public float intensity = 1.0f;
public float threshold = 0.5f;
void Start()
{
GenerateGridTexture();
}
void GenerateGridTexture()
{
Color[] colors = new Color[width * height * depth];
for (int z = 0; z < depth; z++)
{
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
float fx = x * cellSize;
float fy = y * cellSize;
float fz = z * cellSize;
// Compute distance to the nearest grid line
float distanceX = Mathf.Abs(fx % cellSize - cellSize * 0.5f) - lineWidth * 0.5f;
float distanceY = Mathf.Abs(fy % cellSize - cellSize * 0.5f) - lineWidth * 0.5f;
float distanceZ = Mathf.Abs(fz % cellSize - cellSize * 0.5f) - lineWidth * 0.5f;
// Combine distances to get a 3D grid pattern
float distance = Mathf.Min(Mathf.Min(distanceX, distanceY), distanceZ);
// Compute transparency based on the threshold
float alpha = distance > threshold ? 0.0f : 1.0f;
// Set color with transparency
colors[x + y * width + z * width * height] = new Color(intensity, 0.0f, 0.0f, alpha);
}
}
}
// Create a 3D texture and assign the colors
Texture3D texture = new Texture3D(width, height, depth, TextureFormat.RGBA32, true);
texture.SetPixels(colors);
texture.Apply();
// Assign the texture to a material or use it as needed
GetComponent<Renderer>().material.SetTexture("_GridTexture", texture);
}
}
Pourquoi cela?
- boubouk50
- ModoGenereux
- Messages : 6262
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: shader grid transparent volumétrique ?
Une texture3D ne fonctionne pas comme cela, tu ne peux pas juste l'affecter à un mesh.
Normalement, tu peux la visualiser dans l'éditeur et devrait te donner le bon résultat. Déjà, regarde si c'est le cas.
Mais dans la scène, il faut la visualiser avec un shader spécifique :
https://docs.unity3d.com/Manual/class-Texture3D.html
Normalement, tu peux la visualiser dans l'éditeur et devrait te donner le bon résultat. Déjà, regarde si c'est le cas.
Mais dans la scène, il faut la visualiser avec un shader spécifique :
https://docs.unity3d.com/Manual/class-Texture3D.html
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation