Huhu!! :D :D
Bin gerade wieder aufgestanden und ich muss sagen, so gefällt mir das Feedback und motiviert auch! Vielen Dank euch allen!
Ich versuche mal auf alle einzugehen! :D
Also es ist immer noch DirectX 9 was dahinter steckt.
Marcgfx gebe ich recht. Da fehlt noch was... fertig bin ich da noch nicht. Im Moment überlege ich, da vielleicht auch noch mehr mit Farben und Mustern zu spielen.
Voronoi Diagramme hab ich noch nie geproggt. Aber ich glaube, die kann man nicht Lokal erzeugen, oder? Ich hätte von daher nicht gedacht, vernünftige Schuppen hin zu bekommen... aber die Lösung dafür ist dann doch recht simpel. Es sind nämlich die Ziegel, die dahinter stecken... mit ein wenig Fantasie stecken da nämlich die Schuppen drin... man hat Fugen, und "Schuppen". Wenn man da den Raum vorher noch ein wenig zurecht krümmt, dann kommt da Variation rein. Im Gegensatz zu vorher sind nun die 3D Ziegel nicht mehr verschieden lang, sondern sehen räumlich aus wie Cubes. Allerdings ist jede zweite Zeile immernoch zueinander verschoben, dadurch wirkt das besser. Und dadurch dass die 3 dimensional sind, hat man automatisch manchmal auch querstreifen drin, sieht man in dem Megatextur Video an den runden Oberflächen sehr gut, was ich da meine. Ich fände es toll, wenn ich da noch mehr Kontrolle rein bekäme, so dass z.B. speziell Schuppenkränze um den Augen und Mund usw, entstehen würden.
Also bisher liegt eigentlich unter allem nur eine gewöhnliche Noise-Funktion. Erstaunlich was für Strukturen man daraus machen kann.
Das Auge ist auch schon beweglich, sogar die Pupille kann sich verziehen und die Iris verzieht sich dabei mit! Auch wenn das im Spiel wohl später nicht auffallen wird.
Momentan tötet mich die Shaderkomplexität aber. Also ich denke mal, dass es an den Instruktionen liegt, kompilieren scheint der das ohne Probleme, aber anzeigen kommt da nichts, wenn ich zu viel auf einmal aktiviert habe. Schalte ich einzeln was ab, z.B. Zungenmaterial, dann wird auf einmal wieder angezeigt. Ich arbeite ja jetzt schon lange mit manchmal massiv komplexen Shadern und muss sagen, dass da manchmal auch einfach Bugs drin sind, die nicht erklärbar sind. Z.B. je nachdem, wie ich beim Smoothstep irgendwo verblende, werden dann woanders die Schuppen dunkel oder ähnliches. Also natürlich denkt man erst immer, man macht was falsch. Aber wenn man dann genau schaut, dann sind da manchmal Seiteneffekte, die einfach nicht sein dürften.
Wie man sieht, klappt es scheinbar ganz gut, einfach aufs Texturmapping komplett zu verzichten. Mir gefällt der Ansatz, da dadurch ein großer Batzen an Schwierigkeiten weg fällt. Ist zwar langsamer, aber die Grafikkarten werden ja auch schneller und da lässt sich sicher auch noch optimieren.
Falls ich die Shaderkomplexität nicht in den Griff bekomme, überlege ich auch schon daran, vielleicht einfach das ganze zu Splitten und dann Materialen einzeln drauf zu rendern. Was meiner Meinung nach ganz schön ist, dass wirklich alles aus einem Guss ist, selbst das Auge gehört ja zu dem 3D Modell.
Ach und wegen dem Mathematischen Verständnis. Ich möchte jetzt nicht nochmal die IK Diskussion entfachen, aber daran sieht man sehr gut, was dahinter steckt. Das ganze zu Berechnen ist für uns extrem schwer. Aber dennoch sind nicht nur Menschen, sondern auch alle Möglichen Tiere in der Lage, IK anzuwenden. Und das sogar mit jedem beliebigen Endeffektor, nicht nur Knochenspitzen. Wenn ich mein Arm in einem bestimmten Winkel und mit einer bestimmten Stelle auf die Tischkante legen möchte, so ist das kein Problem. :D
Also mathematisch bin ich echt nicht sehr bewandert. Mir machen schon einfachste Dinge Probleme. Und selbst zum kleinen ein mal eins, nehme ich vorsichtshalber den Windowstaschenrechner dazu :D
Aber was ich scheinbar sehr gut kann, bestimmte Muster bzw. Verhaltensweise mathematisch zu übersetzen. Das meiste sind 1D Funktionen. Wenn man etwas doppelt so hell haben möchte, schreibt man eine * 2 dahinter, bei halber Helligkeit * 0.5. Die Power Funktion nutze ich da auch sehr gerne um dann noch das Verhalten etwas zu ändern.
Hier ist mal der Quellcode um das Auge zu realisieren. Ist natürlich ein wenig aus dem Zusammenhang gerissen, aber damit man mal eine Vorstellung hat, wie das ganze dann im Code bei mir aussieht:
Das CF_TIME, was da mit 0 multipliziert wird, ist dafür, um Augenbewegungen zu testen. Ist da eine 1 hinter, dann schaut das Auge hin und her und ändert die Irisform.
Der Quellcode ist dahin gerotzt... also wenn euch Sachen auffallen sollten, die extrem unoptimiert oder sinnlos erscheinen, z.B. ein pow(x, 1) :D, dann liegt es sicher an dem rumprobieren. Muss noch aufgeräumt werden.
Code: Alles auswählen
// eye
[branch] if (mat==6) {
float3 es2 = p - float3(5.06,13.135,0.62);
float es1 = noise(float3(smoothstep(0.0,2,_param.x)*0.03, 0, 0), 2);
c =lerp(c, float4(color(156,120,112)*es1*es1,0), inlrp(0.0,1.3,_param.x));
float tt = CF_TIME.r*0;
float eb = inlrp(3.4,3.5,_param.x);
float3 epos = noise(tt*0.01, 2)-0.5;
float3 es = p - float3(5.06,13.135,0.62) + epos*0.02;
float2 iris = es;
es = es*float3(0.8+sin(tt)*epos.z*0.5,0.2,0);
if(es.x>-0.003) es.x=es.x+0.006;
float edis = length(es);
float irscl = 0.5;
float er = atan2(iris.x, iris.y);
float4 irs = noise(float3(er*0.125*irscl, edis*irscl, 0), 2);
irs = noise(irs*0.04, 2);
float3 ed = irs.x + pow(irs.x, 5)*8 * inlrp(0.05, 0, edis);
float3 ec = color(186,138,4);
float ecb = inlrp(0.0, 0.0175, edis);
ecb *= inlrp(0.05, 0.02, edis+(irs.z-0.5)*0.04);
ec = lerp(ec, color(163,29,36), pow(ecb, 8)*0.6);// * (1-ecb*0.4);
ed = ec*4*ed;
ed *= inlrp(0.01,0.014, edis);
float im = inlrp(0.1, 0.05, length(iris));
ed *= im;
_refl = lerp(_refl, 1, eb*inlrp(0.11, 0.08, length(iris))* 0.5);
c =lerp(c, float4(ed,0), eb);
c = c * (1-pow(inlrp(2.5,0,abs(_param.x-2.5)), 0.5));
}