載入順序
- sdPBR.pmx
- sdPBRGBuffer.x
- skybox/*.x
- skybox/skyboxDisplay*.pmx
設定調整
- 快速調整:sdPBRconfig.exe
- 設定路徑:shader/sdPBRconfig.fxsub
- 設定說明:shader/sdPBRconfig解説.fxsub
說明文件
- 整體說明:readme.html
- 材質說明:material/説明
- 所有材質參數的基本:基本編.fx
- 程序紋理:プロシージャルテクスチャ編.fx
- 法線紋理:法線マップとか編.fx
- 紋理包:テクスチャパック編.fx
- 動圖包:アニメーションテクスチャ編.fx
- 光源說明:lighting/同じ種類のライトをいくつでも置けるようになりました.txt
- 擴充效果說明:posteffect/各自的資料夾內/(可能會有)違いの分かる男.txt
材質
一般用法是將material資料夾內的fx套用到Main面板,但有幾種material分類:
- 一般材質:material
- 場景:bg
- 人物身體:body
- 人物衣服:cloth
- 控制器:controllable
- 控制器的fx建議調整float3行前面的=為*=,否則它的調整只取顏色而不混合貼圖
- 整體說明內的示範材質:custom
- 額外材質:etc
- tool/MaterialImporter導入進來的材質:materialImporter
- 程序化:procedural
- 頂點著色器:即vs_(VertexShader)開頭的material資料夾
- 模型拉伸變形:2bone
- 連續面分解:fracture
- 放大、縮小:scale
- workingfloor用材質:wf_material
- 內容基本與一般材質一樣,只需要在一般材質內的fx添加以下代碼就能轉變成workingfloor用
材質部分參數中文說明
使用例可查看shader/sdPBRcommon.fxsub
路徑代號
- FILE - 讀取相對路徑or絕對路徑
- SP - 讀取高光紋理槽
- TEX - 讀取紋理槽
- PACK0 - 讀取紋理包1
- PACK1 - 讀取紋理包2
- SCREEN - 讀取Screen.bmp
- CODE
pack與file的差異是可同時被多個參數使用,比如:r通道給金屬度、b通道給粗糙度用,gb混合通道給法線使用
使用例:
#define NORMAL_FILE "Normal.jpg" #define NORMAL_FROM NORMAL_FROM_FILE //Normal讀取上述FILE的貼圖路徑 #define TEXTURE_PACK0 "../../texture/hair_normal.jpg" #define SUBNORMAL_FROM SUBNORMAL_FROM_PACK0 //subNormal讀取上述紋理包1的貼圖路徑
|
帶紋理參數
此塊會講解材質紋理部分的程式碼,同時可能會有些省略,帶有//的內容是註解。
"程式碼完整狀態" void SetMaterialParam(inout Material m, float3 n,float3 l, float3 Eye, float2 uv) {
}
#include "../../shader/sdPBRMaterialTail.fxsub" //連接的前置處理器
|
"將會被省略成以下內容" {
}
#include "../../shader/sdPBRMaterialTail.fxsub"
|
baseColor
材質底色,如果沒有特別設定將會是模型材質的紋理槽路徑。
{ m.baseColor *= float3(R,G,B); m.baseColorLoops = 1; m.baseColorScale = 1; } #define BASECOLOR_FROM BASECOLOR_FROM_TEX //沒有設定時的預設(被省略的) #define BASECOLOR_GAMMA 2.2 //標準伽瑪值(被省略的)
#include "../../shader/sdPBRMaterialTail.fxsub"
|
subColor為baseColor的副參數。
Normal
法線,預設是沒有這個參數的。
{ m.normalLoops = 1; m.normalScale = 1; } #define NORMAL_FROM NORMAL_FROM_SP //法線貼圖使用模型材質內的高光貼圖槽路徑 #define NORMAL_AUTOGEN //以上述的法線貼圖亮度梯度製造法線效果
#include "../../shader/sdPBRMaterialTail.fxsub"
|
AO
環境光遮蔽,預設是沒有這個參數的。
{ m.aoLoops = 1; m.aoScale = 1; } #define AO_FILE "AO.jpg" #define AO_FROM AO_FROM_FILE //AO的貼圖讀取上述FILE的貼圖路徑
#include "../../shader/sdPBRMaterialTail.fxsub"
|
Anisotropic
各向異性,預設是沒有這個參數的。
{ m.anisotropic = 1.00; m.anisoAngleX = 0.00; m.anisoAngleY = 0.00;
} #define ANISOTROPIC_FUZZ //各向異性效果模糊
#include "../../shader/sdPBRMaterialTail.fxsub"
|
Specular
環境反射
{ m.specular = 1.00; m.specularTint = 1.00; } #define TEXTURE_PACK0 "../texture/specular.png" #define SPECULAR_FROM SPECULAR_FROM_PACK0
#include "../../shader/sdPBRMaterialTail.fxsub"
|
Roughness
粗糙度
{ m.roughness = 0.5; m.roughnessLoops = 1; m.subRoughnessLoops = 1; }
#define TEXTURE_PACK0 "../../texture/smoothness.png"
#define ROUGHNESS_FROM ROUGHNESS_FROM_PACK0 #define ROUGHNESS_CHANNEL b //上列貼圖使用藍色通道 #define ROUGHNESS_INVERT //因上列貼圖使用的是光滑度,需反轉成粗糙度貼圖使用 #define SUBROUGHNESS_FROM SUBROUGHNESS_FROM_PACK0
#include "../../shader/sdPBRMaterialTail.fxsub"
|
Height
高度(ParallaxOcclusion用)
{ m.heightLoops = 1.00; m.heightScale = 1.00; } #define TEXTURE_PACK0 "../texture/height.png" #define HEIGHT_FROM HEIGHT_FROM_PACK0
#include "../../shader/sdPBRMaterialTail.fxsub"
|
Mofu
絨毛
{ m.mofuLoops = 1.0; m.mofuScale = 1.0; } #define IGNORE_SP //無視模型高光
#define MOFU_FROM MOFU_FROM_FILE #define MOFU_FILE "../../texture/fur.png" #define MOFU_LOOPCOUNT 20
#define MOFU_MOFU 1 //數值0~1,絨毛對外觀的影響程度 #define MOFU_OCCLUSION 0.25 //數值0~1,絨毛深度
#include "../../shader/sdPBRMaterialTail.fxsub"
|
金屬
{ m.metallic = 1.00; } #define TEXTURE_PACK0 "../texture/specular.png" #define METALLIC_FROM METALLIC_FROM_PACK0
#include "../../shader/sdPBRMaterialTail.fxsub"
|
特殊參數
- smoothShade
- 平滑陰影,此項可藉由SdPBR.pmx控制整體,可以在Material內單獨使用
- lightVisibility
- 直接光的影響程度(x:diffuse,y:specular)
- ambientVisibility
- 環境光的影響程度(x:diffuse,y:specular)
- shadowVisibility
- SSDOVisibility
上述參數編寫參考
{ m.smoothShade = 1.0; m.lightVisibility = float2(0.5, 1.0); //0.5的是diffuse(x位),1.0的是specular(y位) m.ambientVisibility = float2(1.0, 1.0); m.shadowVisibility = 1.0; m.SSDOVisibility = 1.0; }
|
HSV
可放置在Material內,使原本的RGB改以HSV形式使用。
{ float3 hsv = float3(h, s, v); m.baseColor *= HSVtoRGB(hsv);
float3 hsv1 = float3(h, s, v); m.sssColor = HSVtoRGB(hsv1); }
|
H = Hue(色相),S = Saturation(飽和),V = Value(明度)
Shade Model ID
PREINTEGRATED_SKIN
皮膚的著色模式,會取用subsurface的曲率,無視toon。
{ m.baseColor *= float3(1.0,1.0,1.0)*1.0; m.subsurface = 0.5; m.sssColor = float3(1.0,0.7,0.75); m.roughness = 0.55; } #define PREINTEGRATED_SKIN //可以模擬人類皮膚透光感的著色模式
#include "../../shader/sdPBRMaterialTail.fxsub"
|
IRIDESCENCE
{ m.iridescence = 0.5; m.iridescenceD = 0.55; } #define IRIDESCENCE //彩虹色的著色模式
#include "../../shader/sdPBRMaterialTail.fxsub"
|
ANISOTROPIC_FUZZ
各項異性模糊
COSMETICS
妝感
{ m.porouscoat = 0.1; //sssColor與basecolor的融色程度 m.sssColor = float3(1.0,0.7,0.75); m.clearcoat = 0.04; m.subsurface = 0.5; //和皮膚的著色模式一樣。 //m.toon = 0.25; //無視toon } #define COSMETICS //妝感的著色模式 #include "../../shader/sdPBRMaterialTail.fxsub"
|