Ca fait pas mal de temps que je n'suis pas venu sur le forum ayant pas mal progressé seul depuis 2-3 ans.
En revanche je reste débutant sur la programmation de shader et c'est bien le problème qui m'amène ajd.
J'utilise GPU Instancer pour instancer des milliers d'arbres, de plantes et de rochers :
https://assetstore.unity.com/packages/t ... cer-117566
L'asset propose un shader ColorVariation qui permet de changer de couleur d'une instance à l'autre et de pouvoir l'update.
Le truc c'est que j'aimerais faire exactement ça mais sur les feuilles d'un SpeedTree ou d'un TreeCreator tree.
L'asset propose un shader pour chacun des types d'arbres mais qui ne dispose pas de la variation de couleur.
J'ai contacté le développeur qui m'a renvoyé sur cette page et qui m'a en gros gentiment dit de me démerder tout seul...
https://wiki.gurbu.com/index.php?title= ... on_them.3F
J'essaie depuis plusieurs jours de me démerder seul... mais sans résultat...
Si qq'un pouvait m'aider à trouver la solution ce serait vraiment sympa, je galère vraiment.
Je vous mets les codes du shader ColorVariation et du shader SpeedTree proposé par l'asset.
Vous pouvez trouver également dans le lien wiki le petit script C# qui permet de faire varier le shader ColorVariation.
Merci !!
Code : Tout sélectionner
Shader "GPUInstancer/ColorVariationShader" {
Properties {
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_Glossiness ("Smoothness", Range(0,1)) = 0.5
_Metallic ("Metallic", Range(0,1)) = 0.0
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
#include "UnityCG.cginc"
#include "./../../../Shaders/Include/GPUInstancerInclude.cginc"
#pragma instancing_options procedural:setupGPUI
#pragma multi_compile_instancing
#pragma surface surf Standard addshadow fullforwardshadows vertex:colorVariationVert
#pragma target 3.0
sampler2D _MainTex;
struct Input {
float2 uv_MainTex;
float4 colorVariation;
};
half _Glossiness;
half _Metallic;
fixed4 _Color;
#ifdef UNITY_PROCEDURAL_INSTANCING_ENABLED
StructuredBuffer<float4> colorBuffer;
#endif
void colorVariationVert (inout appdata_full v, out Input o) {
UNITY_INITIALIZE_OUTPUT(Input, o);
o.colorVariation = _Color;
#ifdef UNITY_PROCEDURAL_INSTANCING_ENABLED
o.colorVariation = colorBuffer[gpui_InstanceID];
#endif
}
void surf (Input IN, inout SurfaceOutputStandard o) {
// Albedo comes from a texture tinted by color
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * saturate(IN.colorVariation);
o.Albedo = c.rgb;
// Metallic and smoothness come from slider variables
o.Metallic = _Metallic;
o.Smoothness = _Glossiness;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Standard"
}
Code : Tout sélectionner
Shader "GPUInstancer/Nature/SPDTree"
{
}