fg only shader?

Wie schreibt man ein Phenomenon, bzw. einen Shader?

Postby jb_alvarado on Sat Dec 22, 2007 18:09 pm

Das hier kompiliert anstandslos:

Code: Select all
#include <stdio>
#include <math>
#include <shader>

struct mrSettings_paras {
   int         finalgather;            
   int       finalgather_mode;         
   miTag      finalgather_file;         
   miBoolean   finalgather_rebuild;      
   miBoolean   finalgather_rebuild_freeze;
   miBoolean   Contrast_all_buffers;      
   };

DLLEXPORT int mrSettings_version(void) { return(1); }
      
DLLEXPORT miBoolean mrSettings (
       miTag *result,
      miState *state,
      mrSettings_paras *paras )
{   
   int f = *mi_eval_integer( &paras->finalgather );
   
   if (f == 1){
      miOptions *o = ( miOptions * )state->options;
      o->finalgather = 'o';
      }
   return(miTRUE);
}




Weiß nur noch net, obs geht...:)

Edit: geht natürlich nicht. Max meckert, dass es kein Geometry shader...
User avatar
jb_alvarado
Moderator
 
Posts: 2021
Joined: Sun Nov 12, 2006 20:16 pm
Location: Dornbirn

Postby jb_alvarado on Fri Dec 28, 2007 13:50 pm

Habe das ganze noch mal überarbeitet, blicken tue ichs aber immer noch net. Wird wohl wieder nur wahrlos zusammengewürfelt sein.
Kannst dich vielleicht noch mal erbarmen, haggi?

Code: Select all


#include <stdio>
#include <math>
#include <shader>
#include <geoshader>
typedef struct {
   int           f_finalgather;            
   int            m_finalgather_mode;         
   miTag        finalgather_file;         
   miBoolean   finalgather_rebuild;      
   miBoolean   finalgather_rebuild_freeze;
   miBoolean   Contrast_all_buffers;      
   } mrSettings_t;

extern "C" DLLEXPORT int mrSettings_version(void) { return(1); }
      
extern "C" DLLEXPORT miBoolean mrSettings (
               miTag          *result,
      miState       *state,
      mrSettings_t    *paras )
{
   int f_finalgather = *mi_eval_integer( &paras->f_finalgather );
   
   miOptions    *mi_api_options_begin(
   char         *mrSettings_t);
   

   
   if (f_finalgather == 1){
      miOptions *o = ( miOptions * )state->options;
      o->finalgather = 'o';
      }
   return (mi_api_options_end());   
   
}

User avatar
jb_alvarado
Moderator
 
Posts: 2021
Joined: Sun Nov 12, 2006 20:16 pm
Location: Dornbirn

Postby haggi on Fri Dec 28, 2007 16:02 pm

Die erste Version war schon ganz korrekt. Deine 2. nicht ganz.

Mit

Code: Select all
  mi_api_options_begin();
     ....
  mi_api_options_end();


Definierst du neue miOptions, du veränderst die alten nicht. Das ist hilfreich wenn man einen Parser baut oder ein mr plugin.

Wenn dein shader anstandslos compiliert und in max gemeckert wird dass was nicht stimmt, dann könnt es auch an deinem mi - interfacer liegen.

Hast du denn deinen geoshader dort auch als geoshader declariert?

Code: Select all
declare shader
     geometry "mrSettings" (...)   # als geometry shader declarieren
     apply geometry # das ist für max glaube ich nicht notwendig
     version 1
end declare
haggi
Admin
 
Posts: 752
Joined: Wed Jan 10, 2007 0:56 am

Postby haggi on Fri Dec 28, 2007 16:08 pm

Übrigens benötigst du nur die "shader.h" als include file. Den Rest kannst du weglassen. geoshader.h benötigst du in erster Linie wenn du auch wirklich geometry erzeugen willst.

Stdio.h beötigst du gar nicht weil du nix ausgibst oder eingibst. Hier solltest du immer mi_info("blabla"); nutzen. Wenn du files lesen willst dann brauchst du das natürlich eventuell. math brauchst du solange nicht wie du keine grossartigen mathematischen Sachen benötigst.
haggi
Admin
 
Posts: 752
Joined: Wed Jan 10, 2007 0:56 am

Postby jb_alvarado on Fri Dec 28, 2007 16:15 pm

haggi wrote:
Hast du denn deinen geoshader dort auch als geoshader declariert?



:? Ich könnt heulen... Hätte ja an alles gedacht, aber nicht an das. Daran hats echt gelegen... Danke für den Hinweis! Der shader funktioniert sogar, allerdings rendert er nach der fg Berechnung trotzdem weiter, obwohl im log-Fenster final gather only steht.
User avatar
jb_alvarado
Moderator
 
Posts: 2021
Joined: Sun Nov 12, 2006 20:16 pm
Location: Dornbirn

Postby haggi on Fri Dec 28, 2007 17:14 pm

Das ist ein Problem. Ich habe mal aus maya mi files exportiert, eines mit der option fg-only und eines mit fullRender. Unglücklicherweise sehen beide mi - files exact gleich aus. Das führt mich zur Annahme, dass das Überspringen des normalen Rendervorgangs in der Tat eine Render-Option ist und nicht in den mi Options festgelegt ist.

Das würde allerdings auch bedeuten, dass die "fgonly" option in den fg modi komplett nutzlos ist.
haggi
Admin
 
Posts: 752
Joined: Wed Jan 10, 2007 0:56 am

Postby jb_alvarado on Fri Dec 28, 2007 17:20 pm

Also mit den shader schreibt er die Option schon ins File rein, auch an der richtige Stelle. Könnt auch an Max liegen. Hatte test halber mal ein skylight rein getan, und als Warnung bekomme ich die Meldung, dass FG aktiviert sein muss, um skylights rendern zu können. Gerender hat Max aber ganz normal mit FG. alle anderen Parameter wie on, oder Fastlokup schreibt er auch an die richtige Stelle. Also irgendwas macht der shader schon, und wenns nur das aktivieren des FGs ist.
Was mich aber noch wundert ist, dass er die Option finalgather_mode nicht annehmen möchte. Und diese gibt es auf jeden Fall. Der shader ctrl_ghost_setting verwendet das nämlich auch.
Schreib doch mal ins mi-File finalgather only rein und rendere das, ich könnt wetten, das die Standalone diesen Parameter berücksichtigt.
User avatar
jb_alvarado
Moderator
 
Posts: 2021
Joined: Sun Nov 12, 2006 20:16 pm
Location: Dornbirn

Postby haggi on Fri Dec 28, 2007 17:30 pm

Okay, du hast recht. Maya schreibt das nur nicht korrekt raus...

Wenn ich im mi - file die option "only" eintrage wird in der Tat lediglich der fg pass gerendert. Das wiederum heisst dass die Änderung im geometry shader zu spät erfolgt weil offenbar alles schon fertig initialisiert ist. Das wäre dann aber genauso unangenehm...
haggi
Admin
 
Posts: 752
Joined: Wed Jan 10, 2007 0:56 am

Postby jb_alvarado on Sat Dec 29, 2007 12:11 pm

haggi wrote:Das wäre dann aber genauso unangenehm...

Jo, in der Tat :(.
Fürs Archiv, das wäre der momentan Code. Vielleicht kann mans ja noch irgendwann gebrauchen:
Code: Select all
 
#include <shader>


typedef struct {
   int         finalgather;   /* 0= off, 1= on, 2= only, 3= fastlookup */

   } mrSettings_t;
   
extern "C" DLLEXPORT int mrSettings_version(void) { return(1); }
      
extern "C" DLLEXPORT miBoolean mrSettings (
       miTag          *result,
   miState       *state,
   mrSettings_t    *paras )
{
   int fgo = *mi_eval_integer( &paras->finalgather );
   
   if (fgo == 1)
   {
      miOptions *on = ( miOptions * )state->options;
      on->finalgather = '$2';
   }
   
   if (fgo == 2)
   {
      miOptions *o = ( miOptions * )state->options;
      o->finalgather = 'o';
   }
   
   if (fgo == 3)
   {
      miOptions *f = ( miOptions * )state->options;
      f->finalgather = 'f';
   }   

        if (fgo == 0)
   {
      miOptions *off = ( miOptions * )state->options;
      off->finalgather = false;
   }

   return miTRUE;   
   
}


Last edited by jb_alvarado on Sat Dec 29, 2007 17:27 pm, edited 3 times in total.
User avatar
jb_alvarado
Moderator
 
Posts: 2021
Joined: Sun Nov 12, 2006 20:16 pm
Location: Dornbirn

Postby haggi on Sat Dec 29, 2007 13:58 pm

Wenns vollständig sein soll, dann solltest du auch die "0" für "kein fg" implementieren. Hast du schon mal versucht fg auszuschalten? Wäre mal interessant ob das funktionniert. Falls nicht wissen wir definitv, dass in diese Phase Änderungen am fg typ nicht möglich sind.
haggi
Admin
 
Posts: 752
Joined: Wed Jan 10, 2007 0:56 am

Postby jb_alvarado on Sat Dec 29, 2007 14:03 pm

Hatte die 0 nicht integriert, weil er bei 0 das FG auch ausgelassen hat (nicht sauber, hast recht. werd das noch mal korrigieren). Berücksichtigen tut Max ja den shader schon. Wenn ich in den Rendersetting FG auslasse und in dem shader aktiviere rendert max auch mit FG. Allerdings wird das wohl wirklich etwas später mit einbezogen, da er im log meckert, ich soll z.B. bei einem skylight FG aktivieren, sonst kann das Bild nicht gerendert werden. Gerendert wird allerdings normal. Bei dem shader ctrl_ghost_setting ist das auch recht interessant. Dort kann man auch FG aktivieren und z.B. den force modus freilegen. Allerdings muss ich dabei auch noch mal das FG in den rendersettings aktivieren.

Edit: hast du bei dir zufällig die VC console in die System Umgebungsvariablen eingebunden? bekomm das hier net so ganz hin, was ein bisschen nervig ist...
User avatar
jb_alvarado
Moderator
 
Posts: 2021
Joined: Sun Nov 12, 2006 20:16 pm
Location: Dornbirn

Postby jb_alvarado on Sat Dec 29, 2007 17:09 pm

Ich muss mich korrigieren, mit dem shader kann man doch die rendersettings übergehen und FG ausschalten. Hatte ein Fehler drin.
User avatar
jb_alvarado
Moderator
 
Posts: 2021
Joined: Sun Nov 12, 2006 20:16 pm
Location: Dornbirn

Postby banned on Sat Dec 29, 2007 18:45 pm

watt denn läuft das jetzt der FG_only Shader. :shock: Kann man das mal testen, habe ein 32Bit System hier. :roll:
banned
 

Postby jb_alvarado on Sat Dec 29, 2007 18:48 pm

Hi Thorsten, theoretisch würde der shader laufen. Wenn du z.B. ein mi-File damit raus schreiben würdest, würde die standalone nur fg berechnen. Aber in Max gehts leider nicht. Weiß leider nicht woran es liegt.

Falls du Trockenübungen machen möchtest :) :

0=off
1=on
2=only
3=fastlookup
Attachments
mrSettings.7z
(58.63 KiB) Downloaded 72 times
User avatar
jb_alvarado
Moderator
 
Posts: 2021
Joined: Sun Nov 12, 2006 20:16 pm
Location: Dornbirn

Postby banned on Sat Dec 29, 2007 19:01 pm

danke... :smt023 was ist das für ein Format !?
banned
 

Return to Writing Shader and Phenomena®

Who is online

Users browsing this forum: No registered users and 1 guest

cron