結局iPiを使っても前転は上手く収録できませんでした。色々頑張って見ましたがダメでした。
腕とか足とかひどい事になり、寝っ転がるくらいで諦めました。
そんでもって、今年はシェーダーをどうにか理解できればと思いましたので
とりあえず初めはソースの中身を理解するためにも既存のシェーダーを移植するところから始めようかと思います。
http://xoliulshader.com/で公開されているMAX用に開発されたxoliulshader2.0がフリー公開されていましたので
勉強のために構造を解析していきます。
以前xoliulshader1.6がSoftImage用に移植されていましたが、そういう感じで2.0も移植できればと思います。
何から手をつけたらいいのか正直わからないので途中で挫折する気もします。
とりあえずWinMeregeを使って公開されているデータを比較してみます。
使ったことない人は、画像の感じで比較部分が色が変わったり段をある程度合わせてくれたりと見やすくなるのでお勧めです。
色々分からないなりに分かったので下にまとめてみます、.fxファイルとはHLSL言語(Cっぽい?)で書かれているらしいですが、 シェーダーの構造体をまず書いてから後半のtechnique部分で実行内容を書くっぽいです。
以下構造体の名前と 中身の差を抜き出したものです。
※変更無しのものはfloat Gamma<>とかのように何も記述していません。
※float DistanceBlur<> <-2.0で無し max?バージョン? のように記述がついているのは変更ありのものです。
※int DiffuseMapUV<> <-2.0で実装? 272行 とか行数が書いてあるのはXoliulshader_2.0.fxの行番号で1.6や1.6XSIと比較して大幅な変更があった部分を記述しています。
次の更新では各中身を拾い食いしながら変更してみてどう変わるか試してみようと思います
-------------------------------------------------------------------------------------------------------
bool bUseObjectNormalsfloat4x4 WorldViewProj
float Gamma<>
int numberOfActiveLights<>
//===========LIGHTS
int numberOfActiveLights<>
float4 light1_Position<>
//SHADOWCODE <-複数シャドウを扱う宣言部分?SIでは重いのでカットしてる感じ
bool bUseShadow<>
uint Shadow1Type<>
float Shadow1Strength<>
float DistanceBlur<> <-2.0で無し max?バージョン?
float4 light2_Position<>
float4 light2Color<> <-結構違う
float4 light3_Position<> <-結構違う
float4 light3Color<> <-書き方が違う
bool bUseHalfLambert<>
float HalfLambertPower<>
float3 ambientcolor<>
bool bUseIBL<> <-2.0で無し
bool bUseIBLCubeMap<> <-2.0で無し
texture IBLcubemap<> <- 2.0でtexture Envcubemap<> ただの変数宣言違い?
samplerCUBE IBLcubemapSampler = sampler_state{};
bool UseIBLambient<>
float IBLBlur<>
float IBLmultiplier<>
float CubeMapGamma<> <-2.0で実装? 216行
UseGradientRamp<> <-2.0で実装? 225行
//==========LightMAP
float LightMapStrength<> <-2.0で廃止?
sampler2D lightSampler = sampler_state<> <-2.0で廃止?
//==========DIFFUSEMAP
bool bUseDiffuseMap<>
half4 diffuseColor : DIFFUSECOLOR<>
texture diffuseMap : DIFFUSEMAP<>
int DiffuseMapUV<> <-2.0で実装? 272行
float VertexDiffuse<>
bool bColorDiffuse<>
sampler2D diffuseSampler = sampler_state<>
half4 diffusefresnelColor<>
float diffuseFresnelPower<>
float diffuseFresnelMult<>
//==========OPACITYMAP
bool bUseAlpha<>
bool bClip<> <-2.0で実装? 341行
float GlobalOpacity<>
//==========SPECULARMAP
bool bUseSpecMap<>
half4 specularColor<>
float speclevel<>
texture specularMap<>
sampler2D specularSampler = sampler_state{};
//==========GLOSSMAP
bool bUseGlossMap<>
texture glossMap<>
sampler2D glossinessSampler = sampler_state{};
float glossiness<>
float glossoffset<>
//==========NORMALMAP
bool bUseNormalMap<>
bool bUseObjectNormals<>
texture normalMap<>
int NormalMapUV<> <-2.0で実装? 475行
bool bFlipGreenChannel<>
bool bFlipRG<>
sampler2D normalSampler = sampler_state{};
//==========GLOWMAP
bool bUseSIMap<>
texture siMap<>
sampler2D siMapSampler = sampler_state{};
float siMapMult<>
float siLevel<> <-2.0で廃止?
bool bUseEdge<>
float EdgeStep<>
float3 EdgeColor<>
//==========Reflections
bool bUseFresnel<>
bool bAlphaMasksFresnel<>
float FresnelPower<>
float FresnelBias<>
float FresnelMult<>
float3 FresnelColor<>
float FresnelMaskHardness<>
bool bUseWorldMask<>
bool bUseReflMap<>
texture ReflMap <>
sampler2D ReflMapSampler = sampler_state{};
bool bUseCubeMap<>
texture reflcubemap<>
samplerCUBE reflcubemapSampler = sampler_state{};
float CubeMapBlur<>
bool bUseReflGloss<>
float EnvRotation<> <-2.0で実装? 650行
//----------------------------------MAXSCRIPT UI VARS
このあと数十行max用?2.0で実装?
//----------------------------------TEXCOORD MAGIC
このあと数十行max用?2.0で実装?
//----------------------------------VS & PS structs
以下頂点,ピクセルシェーダーについての記述
struct VS_InputStruct {}; <-
half2 texCoord4 : TEXCOORD3; の行が2.0で実装
struct VS_To_PS_Struct {}; <-内部の記述がいくつか変更
//==============Custom Functions
void SetupMatrices()
//standard diffuse lighting by dot product
float diffuselight( float3 normal, float3 lightvec){}
//Half Lambert lighting, function by Valve Software.
以下十数行同じ
//seperate specular calculation to make my life easier coding this thing
以下float近辺の幾つかが2.0で変更
//Fresnel falloff function for all round application
フレネルの減衰設定部分?以下961行まで変更なし
float3 NormalApplication(float3 normal, VS_To_PS_Struct In){} <-2.0で実装? 962行
//SHADOWCODE
float ShadowLookUp(float4 position, float3 tangent, float3 binormal, float blur){} <-2.0で追加 983行
//Vertex And Pixel Shaders
//VERTEX SHADER
VS_To_PS_Struct vs_main(VS_InputStruct In) //vertexshader gets input struct from application, all automatically
{} <- VS & PS structsでTEXCOORD0が1.6<-2.0で変更になった関係でココらへんの幾つかも変更 1011
//PIXEL SHADER
float4 ps_main(VS_To_PS_Struct In) : COLOR{}
1029 - 1429行 構造が部分毎で幾つか変更
technique Default {}
technique TwoSided {}
technique Glow{}
-------------------------------------------------------------------------------------------------------
腕とか足とかひどい事になり、寝っ転がるくらいで諦めました。
そんでもって、今年はシェーダーをどうにか理解できればと思いましたので
とりあえず初めはソースの中身を理解するためにも既存のシェーダーを移植するところから始めようかと思います。
http://xoliulshader.com/で公開されているMAX用に開発されたxoliulshader2.0がフリー公開されていましたので
勉強のために構造を解析していきます。
以前xoliulshader1.6がSoftImage用に移植されていましたが、そういう感じで2.0も移植できればと思います。
何から手をつけたらいいのか正直わからないので途中で挫折する気もします。
とりあえずWinMeregeを使って公開されているデータを比較してみます。
使ったことない人は、画像の感じで比較部分が色が変わったり段をある程度合わせてくれたりと見やすくなるのでお勧めです。
色々分からないなりに分かったので下にまとめてみます、.fxファイルとはHLSL言語(Cっぽい?)で書かれているらしいですが、 シェーダーの構造体をまず書いてから後半のtechnique部分で実行内容を書くっぽいです。
以下構造体の名前と 中身の差を抜き出したものです。
※変更無しのものはfloat Gamma<>とかのように何も記述していません。
※float DistanceBlur<> <-2.0で無し max?バージョン? のように記述がついているのは変更ありのものです。
※int DiffuseMapUV<> <-2.0で実装? 272行 とか行数が書いてあるのはXoliulshader_2.0.fxの行番号で1.6や1.6XSIと比較して大幅な変更があった部分を記述しています。
次の更新では各中身を拾い食いしながら変更してみてどう変わるか試してみようと思います
-------------------------------------------------------------------------------------------------------
bool bUseObjectNormalsfloat4x4 WorldViewProj
float Gamma<>
int numberOfActiveLights<>
//===========LIGHTS
int numberOfActiveLights<>
float4 light1_Position<>
//SHADOWCODE <-複数シャドウを扱う宣言部分?SIでは重いのでカットしてる感じ
bool bUseShadow<>
uint Shadow1Type<>
float Shadow1Strength<>
float DistanceBlur<> <-2.0で無し max?バージョン?
float4 light2_Position<>
float4 light2Color<> <-結構違う
float4 light3_Position<> <-結構違う
float4 light3Color<> <-書き方が違う
bool bUseHalfLambert<>
float HalfLambertPower<>
float3 ambientcolor<>
bool bUseIBL<> <-2.0で無し
bool bUseIBLCubeMap<> <-2.0で無し
texture IBLcubemap<> <- 2.0でtexture Envcubemap<> ただの変数宣言違い?
samplerCUBE IBLcubemapSampler = sampler_state{};
bool UseIBLambient<>
float IBLBlur<>
float IBLmultiplier<>
float CubeMapGamma<> <-2.0で実装? 216行
UseGradientRamp<> <-2.0で実装? 225行
//==========LightMAP
float LightMapStrength<> <-2.0で廃止?
sampler2D lightSampler = sampler_state<> <-2.0で廃止?
//==========DIFFUSEMAP
bool bUseDiffuseMap<>
half4 diffuseColor : DIFFUSECOLOR<>
texture diffuseMap : DIFFUSEMAP<>
int DiffuseMapUV<> <-2.0で実装? 272行
float VertexDiffuse<>
bool bColorDiffuse<>
sampler2D diffuseSampler = sampler_state<>
half4 diffusefresnelColor<>
float diffuseFresnelPower<>
float diffuseFresnelMult<>
//==========OPACITYMAP
bool bUseAlpha<>
bool bClip<> <-2.0で実装? 341行
float GlobalOpacity<>
//==========SPECULARMAP
bool bUseSpecMap<>
half4 specularColor<>
float speclevel<>
texture specularMap<>
sampler2D specularSampler = sampler_state{};
//==========GLOSSMAP
bool bUseGlossMap<>
texture glossMap<>
sampler2D glossinessSampler = sampler_state{};
float glossiness<>
float glossoffset<>
//==========NORMALMAP
bool bUseNormalMap<>
bool bUseObjectNormals<>
texture normalMap<>
int NormalMapUV<> <-2.0で実装? 475行
bool bFlipGreenChannel<>
bool bFlipRG<>
sampler2D normalSampler = sampler_state{};
//==========GLOWMAP
bool bUseSIMap<>
texture siMap<>
sampler2D siMapSampler = sampler_state{};
float siMapMult<>
float siLevel<> <-2.0で廃止?
bool bUseEdge<>
float EdgeStep<>
float3 EdgeColor<>
//==========Reflections
bool bUseFresnel<>
bool bAlphaMasksFresnel<>
float FresnelPower<>
float FresnelBias<>
float FresnelMult<>
float3 FresnelColor<>
float FresnelMaskHardness<>
bool bUseWorldMask<>
bool bUseReflMap<>
texture ReflMap <>
sampler2D ReflMapSampler = sampler_state{};
bool bUseCubeMap<>
texture reflcubemap<>
samplerCUBE reflcubemapSampler = sampler_state{};
float CubeMapBlur<>
bool bUseReflGloss<>
float EnvRotation<> <-2.0で実装? 650行
//----------------------------------MAXSCRIPT UI VARS
このあと数十行max用?2.0で実装?
//----------------------------------TEXCOORD MAGIC
このあと数十行max用?2.0で実装?
//----------------------------------VS & PS structs
以下頂点,ピクセルシェーダーについての記述
struct VS_InputStruct {}; <-
half2 texCoord4 : TEXCOORD3; の行が2.0で実装
struct VS_To_PS_Struct {}; <-内部の記述がいくつか変更
//==============Custom Functions
void SetupMatrices()
//standard diffuse lighting by dot product
float diffuselight( float3 normal, float3 lightvec){}
//Half Lambert lighting, function by Valve Software.
以下十数行同じ
//seperate specular calculation to make my life easier coding this thing
以下float近辺の幾つかが2.0で変更
//Fresnel falloff function for all round application
フレネルの減衰設定部分?以下961行まで変更なし
float3 NormalApplication(float3 normal, VS_To_PS_Struct In){} <-2.0で実装? 962行
//SHADOWCODE
float ShadowLookUp(float4 position, float3 tangent, float3 binormal, float blur){} <-2.0で追加 983行
//Vertex And Pixel Shaders
//VERTEX SHADER
VS_To_PS_Struct vs_main(VS_InputStruct In) //vertexshader gets input struct from application, all automatically
{} <- VS & PS structsでTEXCOORD0が1.6<-2.0で変更になった関係でココらへんの幾つかも変更 1011
//PIXEL SHADER
float4 ps_main(VS_To_PS_Struct In) : COLOR{}
1029 - 1429行 構造が部分毎で幾つか変更
technique Default {}
technique TwoSided {}
technique Glow{}
-------------------------------------------------------------------------------------------------------