Toon / Comic Shader

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

ToeB

Betreff: Toon / Comic Shader

BeitragMi, Feb 25, 2009 19:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab schon viele Bilder und so gesehen, wo mit Toonshadern 3D Modelle wie im comic gemalt aussahen. Da hab ich mir gedacht, könnt ich gut für mein Project gebrauchen. Da hab ich dann gleich die Fragen dafür :

Ich brauche nur so einen der die aussehnlinien des Objects dick malt, also die linien die von der camera aus aussen sind, und die die "innen" sind sollen nur etwas angedeutet sein (schwarz).

Wie macht man sowas ? Hat das hier jemand schon gemacht und kann mir das erklären ?

Kennt jemand ein gutes auf Blitz bezogenes Tutorial (möglichst in Deutsch) in dem das gut beschreiebn wird ?

Oder hat jemand sowas schonmal geschrieben und ist bereit mir diese Function zu geben Very Happy ?

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

The_Nici

BeitragMi, Feb 25, 2009 19:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Für Outlines kannst du einfach das Modell nehmen und dann umkehren, dann noch schwarz kolorieren und EntityFX auf 1 setzen.
MfG

ToeB

BeitragMi, Feb 25, 2009 19:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Gut habe ich verstanden, wollte es ausprbieren aber es funtz nicht :

Code: [AUSKLAPPEN]
Graphics3D 800, 600, 16, 2
SetBuffer BackBuffer( )


Global Camera = CreateCamera( )

CameraClsColor Camera, 100, 100, 100


Global TestObj = CreateCone( )
Global ToonObj = CreateToonOutline( TestObj, 1)

PositionEntity TestObj, 0, 0, 5

Repeat
   TurnEntity TestObj, 1, 1, 1
   RenderWorld( )
   Flip
Until KeyHit( 1 )
End


Function CreateToonOutline(ObjMesh, dicke#=1.01, Name$="Obj")
   Local LocalMesh = CopyEntity( ObjMesh )
   EntityParent( LocalMesh, ObjMesh )
   FlipMesh( LocalMesh )
   ScaleMesh LocalMesh, dicke#, dicke#, dicke#
   EntityFX LocalMesh, 1
   EntityColor LocalMesh, 0, 0, 0   
   Return LocalMesh
End Function


Was mache ich falsch ?

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

The_Nici

BeitragMi, Feb 25, 2009 19:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Gat irgendwas mit "Dicke" zu tun, wenn man es rausnimmt funktioniert es.
d.h. mach beim Funktionsaufruf den 2ten Parameter zu 1.1
MfG
 

BadDeath

BeitragMi, Feb 25, 2009 19:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach mal "Local LocalMesh = CopyMesh( ObjMesh )". So gehts nämlich:

Code: [AUSKLAPPEN]
Graphics3D 800,600,32,2
SetBuffer BackBuffer( )

Global Camera = CreateCamera()
CameraClsColor Camera, 100, 100, 100

Global TestObj = CreateCone( )
EntityColor testobj, 255,0,0
Global ToonObj = CreateToonOutline( TestObj, 1.1)

PositionEntity TestObj, 0, 0, 5

Repeat
   TurnEntity TestObj, 1, 1, 1
   RenderWorld()
   Flip
Until KeyHit( 1 )
End


Function CreateToonOutline(ObjMesh, dicke#=1.01, Name$="Obj")
   Local LocalMesh = CopyMesh( ObjMesh )
   EntityParent( LocalMesh, ObjMesh )
   FlipMesh( LocalMesh )
   ScaleMesh LocalMesh, dicke#, dicke#, dicke#
   EntityFX LocalMesh, 1
   EntityColor LocalMesh, 0, 0, 0   
   Return LocalMesh
End Function
-~= real coders just code in binary =~-

The_Nici

BeitragMi, Feb 25, 2009 19:57
Antworten mit Zitat
Benutzer-Profile anzeigen
BadDeath: liegt an ScaleMesh, sagt man dem "ScaleEntity" funktioniert es.
Merke: Wenn Entitybefehle vor Meshbefehlen angewendet werden, werden letztere nicht mehr funktionieren.
MfG

ToeB

BeitragMi, Feb 25, 2009 20:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja cool danke es lag an ScaleMesh ^^


Aber das heißt ich muss für jedes Object was ich habe automatisch ein zweites laden (= doppelter speicherverbrauch). Geht das nicht irgentwie speicherschonender ?

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Feb 25, 2009 20:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit ScaleMesh oder ScaleEntity ''funktioniert'' es nur, wenn das Mesh eine Kugelähnliche Form hat. Alles andere wie Menschen, Autos oder andere Gegenstände funktionieren damit nicht! Nicht das vergrößern der Objekte ist wichtig, sondern die Dicke eines jeder Form eines Objektes. Man muß also anhand der Vertexnormale das Mesh durchgehen und einzelnd die Vertices nach Außen verschieben. Das Mesh dann noch flippen und parallel zum Haumptobjekt an gleicher Ort und Stelle positionieren.

So ein vorhabend ist für Leute die nichtmal wissen, wie vom Grundprinzip so etwas aufzubauen ist, ist das ''selbermachen'' nicht grad anzuraten. Daher würde ich mal im Codearchiv danach suchen. Ich denke mich daran zu erinnern, daß da was rumschwirren müßte.

Für die Schattierung eines Objektes - also in Farbabstufungen wie man sie von Comics her kennt - sollte man anstelle der Vertiecesbeleuchtung eine Toonshade-Textur mit dem Flag 64 laden und auf das Objekt drauf pappen. Je nachdem wie die Textur aussieht, kann man die ''Beleuchtung'' des Objektes beeinflussen. Die einfachste Texturform ist von links nach rechts in z.B. 5 Grauabstufen (hell nach dunkel) zu erstellen. Da kann man allerdings auch noch viel machen, so zum Beispiel Kugelförmige Schattierungen um mehr Räumlichkeit in ein Objekt unter zu bringen etc...
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

The_Nici

BeitragMi, Feb 25, 2009 20:50
Antworten mit Zitat
Benutzer-Profile anzeigen
EDIT: -Snip-

SYSThern

BeitragDo, Feb 26, 2009 12:06
Antworten mit Zitat
Benutzer-Profile anzeigen
hi

Code: [AUSKLAPPEN]

Function Cel_Shade(Shaded_Entity, OutlineScale#=0.025)
   
   
   Outline_Entity = CopyMesh(Shaded_Entity)       
   
   UpdateNormals Outline_Entity
   
   EntityFX Outline_Entity, 1+8
   
   Surfaces = CountSurfaces(Outline_Entity)
   For LOOP_Surface = 1 To Surfaces
      
      Surface_Handle = GetSurface(Outline_Entity, LOOP_Surface)
      
      Verts = CountVertices(Surface_Handle) - 1
      For LOOP_Verts = 0 To Verts-1
         
         
         
         Vx#  = VertexX#(Surface_Handle, LOOP_Verts)
         Vy#  = VertexY#(Surface_Handle, LOOP_Verts)
         Vz#  = VertexZ#(Surface_Handle, LOOP_Verts)
         
         VNx# = VertexNX#(Surface_Handle, LOOP_Verts)
         VNy# = VertexNY#(Surface_Handle, LOOP_Verts)
         VNz# = VertexNZ#(Surface_Handle, LOOP_Verts)
         
         VertexCoords Surface_Handle, LOOP_Verts, Vx#+(VNx#*OutlineScale#), Vy#+(VNy#*OutlineScale#), Vz#+(VNz#*OutlineScale#)
         
      Next
      
   Next
   
   
   FlipMesh Outline_Entity
   
   EntityColor Outline_Entity, 0, 0, 0
   PositionEntity Outline_Entity, EntityX#(Shaded_Entity, True), EntityY#(Shaded_Entity, True), EntityZ#(Shaded_Entity, True)
   
   EntityParent Outline_Entity, Shaded_Entity
   
   
End Function


aus dem englischem forum...
mfG SYSThern
Tools and Programms
--------------------
www.systhern.de

Arrangemonk

BeitragDo, Feb 26, 2009 14:49
Antworten mit Zitat
Benutzer-Profile anzeigen
ne outlein soll man nicht cel shade nennen, das shading kreigt man nämlich hin, indem man den abgehakten farbverlauf als cubemap oder spheremap drauftut
user posted image

irgendwie so war das

und die richtige outline kreigt man hin, indem man den mesh vertexweise seiner nromalen entlang verschiebt
auch "push" genannt
und ich würd die funktion push nennen und net cell shade Very Happy
ingeneur

SYSThern

BeitragFr, Feb 27, 2009 0:11
Antworten mit Zitat
Benutzer-Profile anzeigen
ups vergessen zu ändern hab nur die outlines drin gelassen sry nein is von dem projekt...

https://www.blitzforum.de/foru...hlight=cel

da ist das shading aber sehr weich wenn man ne größere textur nimmt dann wirds härter und sieht besser aus Wink

mfG SYSThern
Tools and Programms
--------------------
www.systhern.de

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group