diff --git a/CHANGELOG.md b/CHANGELOG.md index 27a8ef5..86e8145 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,16 +2,21 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## [1.3.1] - 2024-12-20 + +### Added +- example script to assemble face rig in Maya with textures `dna_viewer_build_rig_with_textures.py` +- added support for Maya 2024 in dna_calibration.mod file ## [1.3.0] - 2024-08-15 ### Added - support for Maya 2024 -- support for Python 3.11 +- support for Python 3.10 - added source code comments to python wrappers ### Fixed -- `CalculateMeshLowerLODsCommand` was rewritten to address edge cases discovered with eyelashes and to handle some common cases of invalid UV data. +- `CalculateMeshLowerLODsCommand` was rewritten to address edge cases discovered with eye lashes and to handle some common cases of invalid UV data. - `RotateCommand` to rotate blend shape target deltas as well. - `SetBlendShapeTargetDeltasCommand` to allow setting vertex indices as well. - Swig generated classes are now wrapped instead of being monkey-patched to invoke constructors and destructors (which allows building with newer Swig versions - 4.0.x and 4.1.x). diff --git a/README.md b/README.md index 1a644a2..4a6434d 100644 --- a/README.md +++ b/README.md @@ -125,6 +125,7 @@ Several Python examples are provided for reference and can be found in the **exa - [Generates rig](/examples/dna_viewer_build_rig.py) - [Export FBX per LOD](/examples/dna_viewer_export_fbx.py) - [Propagating changes from Maya scene to dna](/examples/dna_viewer_grab_changes_from_scene_and_propagate_to_dna.py) +- [Generate face rig with textures](/examples/dna_viewer_build_rig_with_textures.py) Note: Examples are grouped in three groups: DNA, DNACalib, and DNAViewer. These names are embedded as prefixes: dna_, dnacalib_, and dna_viewer_. @@ -171,7 +172,7 @@ else: ``` # Notes -If a user runs examples in Maya 2022, the value for `ROOT_DIR` should be changed and absolute paths must be used, +If a user runs examples in Maya, the value for `ROOT_DIR` should be changed and absolute paths must be used, e.g. `c:/MetaHuman-DNA-Calibration` in Windows or `/home/user/MetaHuman-DNA-Calibration` in Linux. Important: Use `/` (forward slash), Maya uses forward slashes in path. See the [FAQ guide](docs/faq.md) for additional specifications. diff --git a/data/lights.ma b/data/lights.ma new file mode 100644 index 0000000..c8707a5 --- /dev/null +++ b/data/lights.ma @@ -0,0 +1,526 @@ +//Maya ASCII 2018ff09 scene +//Name: dh_lights.ma +//Last modified: Thu, May 11, 2023 11:07:06 AM +//Codeset: 1252 +requires maya "2018ff09"; +requires "stereoCamera" "10.0"; +currentUnit -l centimeter -a degree -t film; +fileInfo "application" "maya"; +fileInfo "product" "Maya 2018"; +fileInfo "version" "2018"; +fileInfo "cutIdentifier" "201903222215-65bada0e52"; +fileInfo "osv" "Microsoft Windows 8 Enterprise Edition, 64-bit (Build 9200)\n"; +createNode transform -s -n "persp"; + rename -uid "7BE03783-4E24-89B6-5989-A493C66637E0"; + setAttr ".v" no; + setAttr ".t" -type "double3" 30.386393925746596 164.46424883057017 220.93384230676068 ; + setAttr ".r" -type "double3" -4.5383527322844488 364.60000000001168 2.4928380793358483e-17 ; +createNode camera -s -n "perspShape" -p "persp"; + rename -uid "17C4DE2D-4474-6D71-CB6F-6A8339904880"; + setAttr -k off ".v" no; + setAttr ".fl" 70; + setAttr ".coi" 235.22766075984245; + setAttr ".imn" -type "string" "persp"; + setAttr ".den" -type "string" "persp_depth"; + setAttr ".man" -type "string" "persp_mask"; + setAttr ".tp" -type "double3" 5.2474091943811381 153.18041361778683 22.081981913115726 ; + setAttr ".hc" -type "string" "viewSet -p %camera"; +createNode transform -s -n "top"; + rename -uid "31146484-4292-2309-297F-65BEAF59D272"; + setAttr ".v" no; + setAttr ".t" -type "double3" 0 100.1 0 ; + setAttr ".r" -type "double3" -89.999999999999986 0 0 ; +createNode camera -s -n "topShape" -p "top"; + rename -uid "57F36015-479F-8693-E5D7-258FDB082AAA"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 100.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "top"; + setAttr ".den" -type "string" "top_depth"; + setAttr ".man" -type "string" "top_mask"; + setAttr ".hc" -type "string" "viewSet -t %camera"; + setAttr ".o" yes; +createNode transform -s -n "front"; + rename -uid "D49E1F9F-45C5-21B5-FBA0-1489D48D157A"; + setAttr ".v" no; + setAttr ".t" -type "double3" 0 0 100.1 ; +createNode camera -s -n "frontShape" -p "front"; + rename -uid "C0399F30-4794-526C-41BE-12864024BA2D"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 100.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "front"; + setAttr ".den" -type "string" "front_depth"; + setAttr ".man" -type "string" "front_mask"; + setAttr ".hc" -type "string" "viewSet -f %camera"; + setAttr ".o" yes; +createNode transform -s -n "side"; + rename -uid "F8B47EFF-46B3-66B0-A1E0-928C7E024511"; + setAttr ".v" no; + setAttr ".t" -type "double3" 100.1 0 0 ; + setAttr ".r" -type "double3" 0 89.999999999999986 0 ; +createNode camera -s -n "sideShape" -p "side"; + rename -uid "1A18B0B0-4597-714D-E72F-DDA863A6711A"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 100.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "side"; + setAttr ".den" -type "string" "side_depth"; + setAttr ".man" -type "string" "side_mask"; + setAttr ".hc" -type "string" "viewSet -s %camera"; + setAttr ".o" yes; +createNode transform -n "Lights"; + rename -uid "BC495762-4E8D-5F2A-7844-19883889F5F0"; + setAttr ".t" -type "double3" -9.1321692712715037e-15 0 0 ; +createNode transform -n "directionalLight1" -p "Lights"; + rename -uid "65DA2872-436B-EDD6-1D2D-E6BFF59299BC"; + setAttr ".t" -type "double3" 15.486014481397302 138.81235271383406 5.2714390949948786 ; + setAttr ".r" -type "double3" -116.515 10.116 -98.348000000000013 ; +createNode directionalLight -n "directionalLightShape1" -p "directionalLight1"; + rename -uid "36B42BE7-4800-2440-AF1C-E980D1CC87BF"; + setAttr -k off ".v"; + setAttr ".cl" -type "float3" 0.49200001 0.74699998 0.72899997 ; + setAttr ".urs" no; + setAttr ".dms" yes; + setAttr ".dr" 1280; +createNode transform -n "directionalLight2" -p "Lights"; + rename -uid "7323F264-4461-0429-2501-FAB17160A35E"; + setAttr ".t" -type "double3" 20.940014481397302 138.81235271383406 5.2714390949948786 ; + setAttr ".r" -type "double3" 25.053 -21.159 -133.766 ; +createNode directionalLight -n "directionalLightShape2" -p "directionalLight2"; + rename -uid "674147DA-41B9-DF32-387E-81AD128B5F70"; + setAttr -k off ".v"; + setAttr ".cl" -type "float3" 0.71764708 0.86666667 0.90196079 ; + setAttr ".in" 1.1449999809265137; + setAttr ".urs" no; + setAttr ".dms" yes; + setAttr ".dr" 1280; +createNode transform -n "directionalLight3" -p "Lights"; + rename -uid "FEE50C1F-498A-CA90-4D71-E1BCF3CC7285"; + setAttr ".t" -type "double3" 18.166014481397301 138.81235271383406 5.2714390949948786 ; + setAttr ".r" -type "double3" -136.209 46.468 55.503 ; +createNode directionalLight -n "directionalLightShape3" -p "directionalLight3"; + rename -uid "0FDD36F9-46DC-9CD8-95F3-0584EE829681"; + setAttr -k off ".v"; + setAttr ".cl" -type "float3" 0.57647061 0.8509804 0.9137255 ; + setAttr ".in" 0.7929999828338623; + setAttr ".urs" no; + setAttr ".dms" yes; + setAttr ".dr" 1280; +createNode lightLinker -s -n "lightLinker1"; + rename -uid "164B5954-4F38-1CA6-4626-8BB06933E9DC"; + setAttr -s 2 ".lnk"; + setAttr -s 2 ".slnk"; +createNode displayLayerManager -n "layerManager"; + rename -uid "F5E9D64D-4FD6-EEA8-5D5E-6B9518D7E895"; +createNode displayLayer -n "defaultLayer"; + rename -uid "F8BF08C2-4846-CFBF-91C2-E580763F662F"; +createNode renderLayerManager -n "renderLayerManager"; + rename -uid "7F55B5EA-488C-8D40-BE39-5496C9D71AF3"; +createNode renderLayer -n "defaultRenderLayer"; + rename -uid "48CE02BC-4D67-7414-65B5-1089007AFCE7"; + setAttr ".g" yes; +createNode script -n "uiConfigurationScriptNode"; + rename -uid "8418F3FA-4979-1AF9-5770-6498EFF21B86"; + setAttr ".b" -type "string" ( + "// Maya Mel UI Configuration File.\n//\n// This script is machine generated. Edit at your own risk.\n//\n//\n\nglobal string $gMainPane;\nif (`paneLayout -exists $gMainPane`) {\n\n\tglobal int $gUseScenePanelConfig;\n\tint $useSceneConfig = $gUseScenePanelConfig;\n\tint $nodeEditorPanelVisible = stringArrayContains(\"nodeEditorPanel1\", `getPanel -vis`);\n\tint $nodeEditorWorkspaceControlOpen = (`workspaceControl -exists nodeEditorPanel1Window` && `workspaceControl -q -visible nodeEditorPanel1Window`);\n\tint $menusOkayInPanels = `optionVar -q allowMenusInPanels`;\n\tint $nVisPanes = `paneLayout -q -nvp $gMainPane`;\n\tint $nPanes = 0;\n\tstring $editorName;\n\tstring $panelName;\n\tstring $itemFilterName;\n\tstring $panelConfig;\n\n\t//\n\t// get current state of the UI\n\t//\n\tsceneUIReplacement -update $gMainPane;\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Top View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\t$editorName = $panelName;\n modelEditor -e \n -docTag \"RADRENDER\" \n -editorChanged \"updateModelPanelBar\" \n -camera \"top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 32768\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n" + + " -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n" + + " -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n" + + " $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Side View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -docTag \"RADRENDER\" \n -editorChanged \"updateModelPanelBar\" \n -camera \"side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n" + + " -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 32768\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n" + + " -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n" + + " -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Front View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -docTag \"RADRENDER\" \n -editorChanged \"updateModelPanelBar\" \n -camera \"front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n" + + " -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 32768\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n" + + " -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n" + + " -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Persp View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\t$editorName = $panelName;\n modelEditor -e \n -docTag \"RADRENDER\" \n -editorChanged \"updateModelPanelBar\" \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 32768\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n" + + " -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n" + + " -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1319\n -height 626\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n" + + " $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showParentContainers 0\n" + + " -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n" + + " -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -selectCommand \"\" \n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 1\n" + + " -showReferenceMembers 1\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n" + + " -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"graphEditor\" (localizedPanelLabel(\"Graph Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels $panelName;\n" + + "\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showParentContainers 1\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n" + + " -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n" + + " -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 1\n -displayInfinities 0\n -displayValues 0\n -autoFit 1\n -autoFitTime 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showResults \"off\" \n -showBufferCurves \"off\" \n -smoothness \"fine\" \n -resultSamples 1\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -showCurveNames 0\n -showActiveCurveNames 0\n -stackedCurves 0\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -displayNormalized 0\n -preSelectionHighlight 0\n" + + " -constrainDrag 0\n -classicMode 1\n -valueLinesToggle 0\n -outliner \"graphEditor1OutlineEd\" \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dopeSheetPanel\" (localizedPanelLabel(\"Dope Sheet\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n" + + " -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showParentContainers 1\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n" + + " -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -autoFitTime 0\n -snapTime \"integer\" \n -snapValue \"none\" \n" + + " -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"timeEditorPanel\" (localizedPanelLabel(\"Time Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Time Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"clipEditorPanel\" (localizedPanelLabel(\"Trax Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n clipEditor -e \n" + + " -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -autoFitTime 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"sequenceEditorPanel\" (localizedPanelLabel(\"Camera Sequencer\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n" + + " -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -autoFitTime 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperGraphPanel\" (localizedPanelLabel(\"Hypergraph Hierarchy\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 0\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n" + + " -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n -showConstraintLabels 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -image \"C:/work/Batman/characters/Bane/sourceimages/Bane_tpage_2048.tga\" \n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperShadePanel\" (localizedPanelLabel(\"Hypershade\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"visorPanel\" (localizedPanelLabel(\"Visor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"nodeEditorPanel\" (localizedPanelLabel(\"Node Editor\")) `;\n\tif ($nodeEditorPanelVisible || $nodeEditorWorkspaceControlOpen) {\n\t\tif (\"\" == $panelName) {\n\t\t\tif ($useSceneConfig) {\n\t\t\t\t$panelName = `scriptedPanel -unParent -type \"nodeEditorPanel\" -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n" + + " -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -connectNodeOnCreation 0\n -connectOnDrop 0\n -copyConnectionsOnPaste 0\n -connectionStyle \"bezier\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -crosshairOnEdgeDragging 0\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -editorMode \"default\" \n" + + " $editorName;\n\t\t\t}\n\t\t} else {\n\t\t\t$label = `panel -q -label $panelName`;\n\t\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -connectNodeOnCreation 0\n -connectOnDrop 0\n -copyConnectionsOnPaste 0\n -connectionStyle \"bezier\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -crosshairOnEdgeDragging 0\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n" + + " -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -editorMode \"default\" \n $editorName;\n\t\t\tif (!$useSceneConfig) {\n\t\t\t\tpanel -e -l $label $panelName;\n\t\t\t}\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"createNodePanel\" (localizedPanelLabel(\"Create Node\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"polyTexturePlacementPanel\" (localizedPanelLabel(\"UV Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"UV Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n" + + "\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"renderWindowPanel\" (localizedPanelLabel(\"Render View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"shapePanel\" (localizedPanelLabel(\"Shape Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tshapePanel -edit -l (localizedPanelLabel(\"Shape Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"posePanel\" (localizedPanelLabel(\"Pose Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tposePanel -edit -l (localizedPanelLabel(\"Pose Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n" + + "\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynRelEdPanel\" (localizedPanelLabel(\"Dynamic Relationships\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"relationshipPanel\" (localizedPanelLabel(\"Relationship Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"referenceEditorPanel\" (localizedPanelLabel(\"Reference Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"componentEditorPanel\" (localizedPanelLabel(\"Component Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Component Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynPaintScriptedPanelType\" (localizedPanelLabel(\"Paint Effects\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"scriptEditorPanel\" (localizedPanelLabel(\"Script Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"profilerPanel\" (localizedPanelLabel(\"Profiler Tool\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Profiler Tool\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"contentBrowserPanel\" (localizedPanelLabel(\"Content Browser\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Content Browser\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"Stereo\" (localizedPanelLabel(\"Stereo\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Stereo\")) -mbv $menusOkayInPanels $panelName;\n" + + "string $editorName = ($panelName+\"Editor\");\n stereoCameraView -e \n -editorChanged \"updateModelPanelBar\" \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"wireframe\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 1\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 32768\n -fogging 0\n" + + " -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererOverrideName \"stereoOverrideVP2\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 4 4 \n -bumpResolution 4 4 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 0\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n" + + " -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n" + + " -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 0\n -height 0\n -sceneRenderFilter 0\n -displayMode \"centerEye\" \n -viewColor 0 0 0 1 \n -useCustomBackground 1\n $editorName;\n stereoCameraView -e -viewSelected 0 $editorName;\n stereoCameraView -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"ToggledOutliner\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"ToggledOutliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n" + + " -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n" + + " -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -selectCommand \"pass\" \n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\tif ($useSceneConfig) {\n" + + " string $configName = `getPanel -cwl (localizedPanelLabel(\"Current Layout\"))`;\n if (\"\" != $configName) {\n\t\t\tpanelConfiguration -edit -label (localizedPanelLabel(\"Current Layout\")) \n\t\t\t\t-userCreated false\n\t\t\t\t-defaultImage \"vacantCell.xP:/\"\n\t\t\t\t-image \"\"\n\t\t\t\t-sc false\n\t\t\t\t-configString \"global string $gMainPane; paneLayout -e -cn \\\"single\\\" -ps 1 100 100 $gMainPane;\"\n\t\t\t\t-removeAllPanels\n\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Persp View\")) \n\t\t\t\t\t\"modelPanel\"\n" + + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -docTag \\\"RADRENDER\\\" \\n -editorChanged \\\"updateModelPanelBar\\\" \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 32768\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1319\\n -height 626\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -docTag \\\"RADRENDER\\\" \\n -editorChanged \\\"updateModelPanelBar\\\" \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"default\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 0\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 32768\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 1\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 0\\n -captureSequenceNumber -1\\n -width 1319\\n -height 626\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + + "\t\t\t\t$configName;\n\n setNamedPanelLayout (localizedPanelLabel(\"Current Layout\"));\n }\n\n panelHistory -e -clear mainPanelHistory;\n sceneUIReplacement -clear;\n\t}\n\n\ngrid -spacing 5 -size 12 -divisions 5 -displayAxes yes -displayGridLines yes -displayDivisionLines yes -displayPerspectiveLabels no -displayOrthographicLabels no -displayAxesBold yes -perspectiveLabelPosition axis -orthographicLabelPosition edge;\nviewManip -drawCompass 0 -compassAngle 0 -frontParameters \"1 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000\" -homeParameters \"\" -selectionLockParameters \"\";\n}\n"); + setAttr ".st" 3; +createNode script -n "sceneConfigurationScriptNode"; + rename -uid "55EEE3F8-4EE1-A60E-BD11-499251DB7F72"; + addAttr -ci true -m -sn "stringOptions" -ln "stringOptions" -at "compound" -nc + 3; + addAttr -ci true -sn "name" -ln "name" -dt "string" -p "stringOptions"; + addAttr -ci true -sn "value" -ln "value" -dt "string" -p "stringOptions"; + addAttr -ci true -sn "type" -ln "type" -dt "string" -p "stringOptions"; + setAttr ".b" -type "string" "playbackOptions -min 1 -max 120 -ast 1 -aet 200 "; + setAttr ".st" 6; + setAttr -s 48 ".stringOptions"; + setAttr ".stringOptions[0].name" -type "string" "rast motion factor"; + setAttr ".stringOptions[0].value" -type "string" "1.0"; + setAttr ".stringOptions[0].type" -type "string" "scalar"; + setAttr ".stringOptions[1].name" -type "string" "rast transparency depth"; + setAttr ".stringOptions[1].value" -type "string" "8"; + setAttr ".stringOptions[1].type" -type "string" "integer"; + setAttr ".stringOptions[2].name" -type "string" "rast useopacity"; + setAttr ".stringOptions[2].value" -type "string" "true"; + setAttr ".stringOptions[2].type" -type "string" "boolean"; + setAttr ".stringOptions[3].name" -type "string" "importon"; + setAttr ".stringOptions[3].value" -type "string" "false"; + setAttr ".stringOptions[3].type" -type "string" "boolean"; + setAttr ".stringOptions[4].name" -type "string" "importon density"; + setAttr ".stringOptions[4].value" -type "string" "1.0"; + setAttr ".stringOptions[4].type" -type "string" "scalar"; + setAttr ".stringOptions[5].name" -type "string" "importon merge"; + setAttr ".stringOptions[5].value" -type "string" "0.0"; + setAttr ".stringOptions[5].type" -type "string" "scalar"; + setAttr ".stringOptions[6].name" -type "string" "importon trace depth"; + setAttr ".stringOptions[6].value" -type "string" "0"; + setAttr ".stringOptions[6].type" -type "string" "integer"; + setAttr ".stringOptions[7].name" -type "string" "importon traverse"; + setAttr ".stringOptions[7].value" -type "string" "true"; + setAttr ".stringOptions[7].type" -type "string" "boolean"; + setAttr ".stringOptions[8].name" -type "string" "shadowmap pixel samples"; + setAttr ".stringOptions[8].value" -type "string" "3"; + setAttr ".stringOptions[8].type" -type "string" "integer"; + setAttr ".stringOptions[9].name" -type "string" "ambient occlusion"; + setAttr ".stringOptions[9].value" -type "string" "false"; + setAttr ".stringOptions[9].type" -type "string" "boolean"; + setAttr ".stringOptions[10].name" -type "string" "ambient occlusion rays"; + setAttr ".stringOptions[10].value" -type "string" "64"; + setAttr ".stringOptions[10].type" -type "string" "integer"; + setAttr ".stringOptions[11].name" -type "string" "ambient occlusion cache"; + setAttr ".stringOptions[11].value" -type "string" "false"; + setAttr ".stringOptions[11].type" -type "string" "boolean"; + setAttr ".stringOptions[12].name" -type "string" "ambient occlusion cache density"; + setAttr ".stringOptions[12].value" -type "string" "1.0"; + setAttr ".stringOptions[12].type" -type "string" "scalar"; + setAttr ".stringOptions[13].name" -type "string" "ambient occlusion cache points"; + setAttr ".stringOptions[13].value" -type "string" "64"; + setAttr ".stringOptions[13].type" -type "string" "integer"; + setAttr ".stringOptions[14].name" -type "string" "irradiance particles"; + setAttr ".stringOptions[14].value" -type "string" "false"; + setAttr ".stringOptions[14].type" -type "string" "boolean"; + setAttr ".stringOptions[15].name" -type "string" "irradiance particles rays"; + setAttr ".stringOptions[15].value" -type "string" "256"; + setAttr ".stringOptions[15].type" -type "string" "integer"; + setAttr ".stringOptions[16].name" -type "string" "irradiance particles interpolate"; + setAttr ".stringOptions[16].value" -type "string" "1"; + setAttr ".stringOptions[16].type" -type "string" "integer"; + setAttr ".stringOptions[17].name" -type "string" "irradiance particles interppoints"; + setAttr ".stringOptions[17].value" -type "string" "64"; + setAttr ".stringOptions[17].type" -type "string" "integer"; + setAttr ".stringOptions[18].name" -type "string" "irradiance particles indirect passes"; + setAttr ".stringOptions[18].value" -type "string" "0"; + setAttr ".stringOptions[18].type" -type "string" "integer"; + setAttr ".stringOptions[19].name" -type "string" "irradiance particles scale"; + setAttr ".stringOptions[19].value" -type "string" "1.0"; + setAttr ".stringOptions[19].type" -type "string" "scalar"; + setAttr ".stringOptions[20].name" -type "string" "irradiance particles env"; + setAttr ".stringOptions[20].value" -type "string" "true"; + setAttr ".stringOptions[20].type" -type "string" "boolean"; + setAttr ".stringOptions[21].name" -type "string" "irradiance particles env rays"; + setAttr ".stringOptions[21].value" -type "string" "256"; + setAttr ".stringOptions[21].type" -type "string" "integer"; + setAttr ".stringOptions[22].name" -type "string" "irradiance particles env scale"; + setAttr ".stringOptions[22].value" -type "string" "1"; + setAttr ".stringOptions[22].type" -type "string" "integer"; + setAttr ".stringOptions[23].name" -type "string" "irradiance particles rebuild"; + setAttr ".stringOptions[23].value" -type "string" "true"; + setAttr ".stringOptions[23].type" -type "string" "boolean"; + setAttr ".stringOptions[24].name" -type "string" "irradiance particles file"; + setAttr ".stringOptions[24].value" -type "string" ""; + setAttr ".stringOptions[24].type" -type "string" "string"; + setAttr ".stringOptions[25].name" -type "string" "geom displace motion factor"; + setAttr ".stringOptions[25].value" -type "string" "1.0"; + setAttr ".stringOptions[25].type" -type "string" "scalar"; + setAttr ".stringOptions[26].name" -type "string" "contrast all buffers"; + setAttr ".stringOptions[26].value" -type "string" "true"; + setAttr ".stringOptions[26].type" -type "string" "boolean"; + setAttr ".stringOptions[27].name" -type "string" "finalgather normal tolerance"; + setAttr ".stringOptions[27].value" -type "string" "25.842"; + setAttr ".stringOptions[27].type" -type "string" "scalar"; + setAttr ".stringOptions[28].name" -type "string" "trace camera clip"; + setAttr ".stringOptions[28].value" -type "string" "false"; + setAttr ".stringOptions[28].type" -type "string" "boolean"; + setAttr ".stringOptions[29].name" -type "string" "unified sampling"; + setAttr ".stringOptions[29].value" -type "string" "true"; + setAttr ".stringOptions[29].type" -type "string" "boolean"; + setAttr ".stringOptions[30].name" -type "string" "samples quality"; + setAttr ".stringOptions[30].value" -type "string" "0.25 0.25 0.25 0.25"; + setAttr ".stringOptions[30].type" -type "string" "color"; + setAttr ".stringOptions[31].name" -type "string" "samples min"; + setAttr ".stringOptions[31].value" -type "string" "1.0"; + setAttr ".stringOptions[31].type" -type "string" "scalar"; + setAttr ".stringOptions[32].name" -type "string" "samples max"; + setAttr ".stringOptions[32].value" -type "string" "100.0"; + setAttr ".stringOptions[32].type" -type "string" "scalar"; + setAttr ".stringOptions[33].name" -type "string" "samples error cutoff"; + setAttr ".stringOptions[33].value" -type "string" "0.0 0.0 0.0 0.0"; + setAttr ".stringOptions[33].type" -type "string" "color"; + setAttr ".stringOptions[34].name" -type "string" "samples per object"; + setAttr ".stringOptions[34].value" -type "string" "false"; + setAttr ".stringOptions[34].type" -type "string" "boolean"; + setAttr ".stringOptions[35].name" -type "string" "progressive"; + setAttr ".stringOptions[35].value" -type "string" "false"; + setAttr ".stringOptions[35].type" -type "string" "boolean"; + setAttr ".stringOptions[36].name" -type "string" "progressive max time"; + setAttr ".stringOptions[36].value" -type "string" "0"; + setAttr ".stringOptions[36].type" -type "string" "integer"; + setAttr ".stringOptions[37].name" -type "string" "progressive subsampling size"; + setAttr ".stringOptions[37].value" -type "string" "4"; + setAttr ".stringOptions[37].type" -type "string" "integer"; + setAttr ".stringOptions[38].name" -type "string" "iray"; + setAttr ".stringOptions[38].value" -type "string" "false"; + setAttr ".stringOptions[38].type" -type "string" "boolean"; + setAttr ".stringOptions[39].name" -type "string" "light relative scale"; + setAttr ".stringOptions[39].value" -type "string" "0.31831"; + setAttr ".stringOptions[39].type" -type "string" "scalar"; + setAttr ".stringOptions[40].name" -type "string" "trace camera motion vectors"; + setAttr ".stringOptions[40].value" -type "string" "false"; + setAttr ".stringOptions[40].type" -type "string" "boolean"; + setAttr ".stringOptions[41].name" -type "string" "ray differentials"; + setAttr ".stringOptions[41].value" -type "string" "true"; + setAttr ".stringOptions[41].type" -type "string" "boolean"; + setAttr ".stringOptions[42].name" -type "string" "environment lighting mode"; + setAttr ".stringOptions[42].value" -type "string" "off"; + setAttr ".stringOptions[42].type" -type "string" "string"; + setAttr ".stringOptions[43].name" -type "string" "environment lighting quality"; + setAttr ".stringOptions[43].value" -type "string" "0.2"; + setAttr ".stringOptions[43].type" -type "string" "scalar"; + setAttr ".stringOptions[44].name" -type "string" "environment lighting shadow"; + setAttr ".stringOptions[44].value" -type "string" "transparent"; + setAttr ".stringOptions[44].type" -type "string" "string"; + setAttr ".stringOptions[45].name" -type "string" "environment lighting resolution"; + setAttr ".stringOptions[45].value" -type "string" "512"; + setAttr ".stringOptions[45].type" -type "string" "integer"; + setAttr ".stringOptions[46].name" -type "string" "environment lighting shader samples"; + setAttr ".stringOptions[46].value" -type "string" "2"; + setAttr ".stringOptions[46].type" -type "string" "integer"; + setAttr ".stringOptions[47].name" -type "string" "environment lighting scale"; + setAttr ".stringOptions[47].value" -type "string" "1.0 1.0 1.0"; + setAttr ".stringOptions[47].type" -type "string" "color"; +createNode shapeEditorManager -n "shapeEditorManager"; + rename -uid "C1A4E002-4B00-921F-6C36-E7981109BC70"; +createNode poseInterpolatorManager -n "poseInterpolatorManager"; + rename -uid "0A7A777B-42BC-EFFC-F4FB-ECB6E726E530"; +createNode nodeGraphEditorInfo -n "hyperShadePrimaryNodeEditorSavedTabsInfo"; + rename -uid "A959A99A-4D35-3DA7-D5AD-E39C23F21339"; + setAttr ".tgi[0].tn" -type "string" "Untitled_1"; + setAttr ".tgi[0].vl" -type "double2" -330.95236780151544 -323.80951094248991 ; + setAttr ".tgi[0].vh" -type "double2" 317.85713022663526 338.09522466054096 ; +select -ne :time1; + setAttr -av -k on ".cch"; + setAttr -k on ".fzn"; + setAttr -av -cb on ".ihi"; + setAttr -av -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -k on ".o" 1; + setAttr -av -k on ".unw" 1; + setAttr -av -k on ".etw"; + setAttr -av -k on ".tps"; + setAttr -av -k on ".tms"; +select -ne :hardwareRenderingGlobals; + setAttr -av -k on ".cch"; + setAttr -av -k on ".ihi"; + setAttr -av -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr ".otfna" -type "stringArray" 22 "NURBS Curves" "NURBS Surfaces" "Polygons" "Subdiv Surface" "Particles" "Particle Instance" "Fluids" "Strokes" "Image Planes" "UI" "Lights" "Cameras" "Locators" "Joints" "IK Handles" "Deformers" "Motion Trails" "Components" "Hair Systems" "Follicles" "Misc. UI" "Ornaments" ; + setAttr ".otfva" -type "Int32Array" 22 0 1 1 1 1 1 + 1 1 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 ; + setAttr -k on ".hwi"; + setAttr -av ".ta"; + setAttr -av ".tq"; + setAttr -av ".etmr" no; + setAttr -av ".tmr" 4096; + setAttr -av ".aoon"; + setAttr -av ".aoam"; + setAttr -av ".aora"; + setAttr -k on ".hff"; + setAttr -av -k on ".hfd"; + setAttr -av -k on ".hfs"; + setAttr -av -k on ".hfe"; + setAttr -av ".hfc"; + setAttr -av -k on ".hfcr"; + setAttr -av -k on ".hfcg"; + setAttr -av -k on ".hfcb"; + setAttr -av -k on ".hfa"; + setAttr -av ".mbe"; + setAttr -av -k on ".mbsof"; + setAttr -k on ".blen"; + setAttr -k on ".blat"; + setAttr -av ".msaa"; +select -ne :renderPartition; + setAttr -av -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -av -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -s 2 ".st"; + setAttr -cb on ".an"; + setAttr -cb on ".pt"; +select -ne :renderGlobalsList1; + setAttr -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -k on ".nds"; + setAttr -cb on ".bnm"; +select -ne :defaultShaderList1; + setAttr -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -s 4 ".s"; +select -ne :postProcessList1; + setAttr -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -s 2 ".p"; +select -ne :defaultRenderingList1; + setAttr -k on ".ihi"; +select -ne :lightList1; + setAttr -s 3 ".l"; +select -ne :initialShadingGroup; + setAttr -av -k on ".cch"; + setAttr -k on ".fzn"; + setAttr -cb on ".ihi"; + setAttr -av -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -k on ".bbx"; + setAttr -k on ".vwm"; + setAttr -k on ".tpv"; + setAttr -k on ".uit"; + setAttr -k on ".mwc"; + setAttr -cb on ".an"; + setAttr -cb on ".il"; + setAttr -cb on ".vo"; + setAttr -cb on ".eo"; + setAttr -cb on ".fo"; + setAttr -cb on ".epo"; + setAttr -k on ".ro" yes; +select -ne :initialParticleSE; + setAttr -av -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -av -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -k on ".mwc"; + setAttr -cb on ".an"; + setAttr -cb on ".il"; + setAttr -cb on ".vo"; + setAttr -cb on ".eo"; + setAttr -cb on ".fo"; + setAttr -cb on ".epo"; + setAttr -k on ".ro" yes; +lockNode -l 0 -lu 1; +select -ne :defaultResolution; + setAttr -av -k on ".cch"; + setAttr -av -k on ".ihi"; + setAttr -av -k on ".nds"; + setAttr -k on ".bnm"; + setAttr -av -k on ".w"; + setAttr -av -k on ".h"; + setAttr -av -k on ".pa" 1; + setAttr -av -k on ".al"; + setAttr -av -k on ".dar"; + setAttr -av -k on ".ldar"; + setAttr -av -k on ".dpi"; + setAttr -av -k on ".off"; + setAttr -av -k on ".fld"; + setAttr -av -k on ".zsl"; + setAttr -av -k on ".isu"; + setAttr -av -k on ".pdu"; +select -ne :defaultLightSet; + setAttr -k on ".cch"; + setAttr -k on ".ihi"; + setAttr -av -k on ".nds"; + setAttr -k on ".bnm"; + setAttr -s 3 ".dsm"; + setAttr -k on ".mwc"; + setAttr -k on ".an"; + setAttr -k on ".il"; + setAttr -k on ".vo"; + setAttr -k on ".eo"; + setAttr -k on ".fo"; + setAttr -k on ".epo"; + setAttr -k on ".ro"; +select -ne :hardwareRenderGlobals; + setAttr -av -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -av -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -av -k off -cb on ".ctrs" 256; + setAttr -av -k off -cb on ".btrs" 512; + setAttr -av -k off -cb on ".fbfm"; + setAttr -av -k off -cb on ".ehql"; + setAttr -av -k off -cb on ".eams"; + setAttr -av -k off -cb on ".eeaa"; + setAttr -av -k off -cb on ".engm"; + setAttr -av -k off -cb on ".mes"; + setAttr -av -k off -cb on ".emb"; + setAttr -av -k off -cb on ".mbbf"; + setAttr -av -k off -cb on ".mbs"; + setAttr -av -k off -cb on ".trm"; + setAttr -av -k off -cb on ".tshc"; + setAttr -av -k off -cb on ".enpt"; + setAttr -av -k off -cb on ".clmt"; + setAttr -av -k off -cb on ".tcov"; + setAttr -av -k off -cb on ".lith"; + setAttr -av -k off -cb on ".sobc"; + setAttr -av -k off -cb on ".cuth"; + setAttr -av -k off -cb on ".hgcd"; + setAttr -av -k off -cb on ".hgci"; + setAttr -av -k off -cb on ".mgcs"; + setAttr -av -k off -cb on ".twa"; + setAttr -av -k off -cb on ".twz"; + setAttr -cb on ".hwcc"; + setAttr -cb on ".hwdp"; + setAttr -cb on ".hwql"; + setAttr -k on ".hwfr"; + setAttr -k on ".soll"; + setAttr -k on ".sosl"; + setAttr -k on ".bswa"; + setAttr -k on ".shml"; + setAttr -k on ".hwel"; +relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +connectAttr "layerManager.dli[0]" "defaultLayer.id"; +connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid"; +connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na; +connectAttr "directionalLightShape1.ltd" ":lightList1.l" -na; +connectAttr "directionalLightShape2.ltd" ":lightList1.l" -na; +connectAttr "directionalLightShape3.ltd" ":lightList1.l" -na; +connectAttr ":perspShape.msg" ":defaultRenderGlobals.sc"; +connectAttr "directionalLight1.iog" ":defaultLightSet.dsm" -na; +connectAttr "directionalLight2.iog" ":defaultLightSet.dsm" -na; +connectAttr "directionalLight3.iog" ":defaultLightSet.dsm" -na; +// End of dh_lights.ma diff --git a/data/maps/dx11_diffuseIrradiance_map.dds b/data/maps/dx11_diffuseIrradiance_map.dds new file mode 100644 index 0000000..96bbf92 Binary files /dev/null and b/data/maps/dx11_diffuseIrradiance_map.dds differ diff --git a/data/maps/dx11_jitter_map.tga b/data/maps/dx11_jitter_map.tga new file mode 100644 index 0000000..40ee6bb Binary files /dev/null and b/data/maps/dx11_jitter_map.tga differ diff --git a/data/maps/dx11_skinLUT_map.tga b/data/maps/dx11_skinLUT_map.tga new file mode 100644 index 0000000..cf79bec Binary files /dev/null and b/data/maps/dx11_skinLUT_map.tga differ diff --git a/data/maps/dx11_specularIrradiance_map.dds b/data/maps/dx11_specularIrradiance_map.dds new file mode 100644 index 0000000..822e949 Binary files /dev/null and b/data/maps/dx11_specularIrradiance_map.dds differ diff --git a/data/maps/eyelashes_color_map.tga b/data/maps/eyelashes_color_map.tga new file mode 100644 index 0000000..24f06c3 Binary files /dev/null and b/data/maps/eyelashes_color_map.tga differ diff --git a/data/maps/eyes_color_map.tga b/data/maps/eyes_color_map.tga new file mode 100644 index 0000000..b788b60 Binary files /dev/null and b/data/maps/eyes_color_map.tga differ diff --git a/data/maps/eyes_normal_map.tga b/data/maps/eyes_normal_map.tga new file mode 100644 index 0000000..cd74555 Binary files /dev/null and b/data/maps/eyes_normal_map.tga differ diff --git a/data/maps/head_cavity_map.tga b/data/maps/head_cavity_map.tga new file mode 100644 index 0000000..b034733 Binary files /dev/null and b/data/maps/head_cavity_map.tga differ diff --git a/data/maps/head_cm1_color_map.tga b/data/maps/head_cm1_color_map.tga new file mode 100644 index 0000000..7dcae9d Binary files /dev/null and b/data/maps/head_cm1_color_map.tga differ diff --git a/data/maps/head_cm2_color_map.tga b/data/maps/head_cm2_color_map.tga new file mode 100644 index 0000000..019bab3 Binary files /dev/null and b/data/maps/head_cm2_color_map.tga differ diff --git a/data/maps/head_cm3_color_map.tga b/data/maps/head_cm3_color_map.tga new file mode 100644 index 0000000..5ebabc7 Binary files /dev/null and b/data/maps/head_cm3_color_map.tga differ diff --git a/data/maps/head_color_map.tga b/data/maps/head_color_map.tga new file mode 100644 index 0000000..156e746 Binary files /dev/null and b/data/maps/head_color_map.tga differ diff --git a/data/maps/head_micro_normal_map.tga b/data/maps/head_micro_normal_map.tga new file mode 100644 index 0000000..dbd77d3 Binary files /dev/null and b/data/maps/head_micro_normal_map.tga differ diff --git a/data/maps/head_normal_map.tga b/data/maps/head_normal_map.tga new file mode 100644 index 0000000..b931470 Binary files /dev/null and b/data/maps/head_normal_map.tga differ diff --git a/data/maps/head_roughness_map.tga b/data/maps/head_roughness_map.tga new file mode 100644 index 0000000..9d9545a Binary files /dev/null and b/data/maps/head_roughness_map.tga differ diff --git a/data/maps/head_wm1_normal_map.tga b/data/maps/head_wm1_normal_map.tga new file mode 100644 index 0000000..88af212 Binary files /dev/null and b/data/maps/head_wm1_normal_map.tga differ diff --git a/data/maps/head_wm2_normal_map.tga b/data/maps/head_wm2_normal_map.tga new file mode 100644 index 0000000..b011178 Binary files /dev/null and b/data/maps/head_wm2_normal_map.tga differ diff --git a/data/maps/head_wm3_normal_map.tga b/data/maps/head_wm3_normal_map.tga new file mode 100644 index 0000000..3961a9c Binary files /dev/null and b/data/maps/head_wm3_normal_map.tga differ diff --git a/data/maps/teeth_color_map.tga b/data/maps/teeth_color_map.tga new file mode 100644 index 0000000..0c4155d Binary files /dev/null and b/data/maps/teeth_color_map.tga differ diff --git a/data/maps/teeth_normal_map.tga b/data/maps/teeth_normal_map.tga new file mode 100644 index 0000000..e90f38c Binary files /dev/null and b/data/maps/teeth_normal_map.tga differ diff --git a/data/masks/head_wm13_lips_DL_msk.tga b/data/masks/head_wm13_lips_DL_msk.tga new file mode 100644 index 0000000..03d954c Binary files /dev/null and b/data/masks/head_wm13_lips_DL_msk.tga differ diff --git a/data/masks/head_wm13_lips_DR_msk.tga b/data/masks/head_wm13_lips_DR_msk.tga new file mode 100644 index 0000000..c67f397 Binary files /dev/null and b/data/masks/head_wm13_lips_DR_msk.tga differ diff --git a/data/masks/head_wm13_lips_UL_msk.tga b/data/masks/head_wm13_lips_UL_msk.tga new file mode 100644 index 0000000..6ff4a73 Binary files /dev/null and b/data/masks/head_wm13_lips_UL_msk.tga differ diff --git a/data/masks/head_wm13_lips_UR_msk.tga b/data/masks/head_wm13_lips_UR_msk.tga new file mode 100644 index 0000000..852820f Binary files /dev/null and b/data/masks/head_wm13_lips_UR_msk.tga differ diff --git a/data/masks/head_wm1_blink_L_msk.tga b/data/masks/head_wm1_blink_L_msk.tga new file mode 100644 index 0000000..85170f3 Binary files /dev/null and b/data/masks/head_wm1_blink_L_msk.tga differ diff --git a/data/masks/head_wm1_blink_R_msk.tga b/data/masks/head_wm1_blink_R_msk.tga new file mode 100644 index 0000000..d157e88 Binary files /dev/null and b/data/masks/head_wm1_blink_R_msk.tga differ diff --git a/data/masks/head_wm1_browsRaiseInner_L_msk.tga b/data/masks/head_wm1_browsRaiseInner_L_msk.tga new file mode 100644 index 0000000..c9bf1f2 Binary files /dev/null and b/data/masks/head_wm1_browsRaiseInner_L_msk.tga differ diff --git a/data/masks/head_wm1_browsRaiseInner_R_msk.tga b/data/masks/head_wm1_browsRaiseInner_R_msk.tga new file mode 100644 index 0000000..90fe9e1 Binary files /dev/null and b/data/masks/head_wm1_browsRaiseInner_R_msk.tga differ diff --git a/data/masks/head_wm1_browsRaiseOuter_L_msk.tga b/data/masks/head_wm1_browsRaiseOuter_L_msk.tga new file mode 100644 index 0000000..360e5b9 Binary files /dev/null and b/data/masks/head_wm1_browsRaiseOuter_L_msk.tga differ diff --git a/data/masks/head_wm1_browsRaiseOuter_R_msk.tga b/data/masks/head_wm1_browsRaiseOuter_R_msk.tga new file mode 100644 index 0000000..ec1574e Binary files /dev/null and b/data/masks/head_wm1_browsRaiseOuter_R_msk.tga differ diff --git a/data/masks/head_wm1_chinRaise_L_msk.tga b/data/masks/head_wm1_chinRaise_L_msk.tga new file mode 100644 index 0000000..fba5930 Binary files /dev/null and b/data/masks/head_wm1_chinRaise_L_msk.tga differ diff --git a/data/masks/head_wm1_chinRaise_R_msk.tga b/data/masks/head_wm1_chinRaise_R_msk.tga new file mode 100644 index 0000000..36d2e0d Binary files /dev/null and b/data/masks/head_wm1_chinRaise_R_msk.tga differ diff --git a/data/masks/head_wm1_jawOpen_msk.tga b/data/masks/head_wm1_jawOpen_msk.tga new file mode 100644 index 0000000..c3e7407 Binary files /dev/null and b/data/masks/head_wm1_jawOpen_msk.tga differ diff --git a/data/masks/head_wm1_purse_DL_msk.tga b/data/masks/head_wm1_purse_DL_msk.tga new file mode 100644 index 0000000..982f0e9 Binary files /dev/null and b/data/masks/head_wm1_purse_DL_msk.tga differ diff --git a/data/masks/head_wm1_purse_DR_msk.tga b/data/masks/head_wm1_purse_DR_msk.tga new file mode 100644 index 0000000..584f688 Binary files /dev/null and b/data/masks/head_wm1_purse_DR_msk.tga differ diff --git a/data/masks/head_wm1_purse_UL_msk.tga b/data/masks/head_wm1_purse_UL_msk.tga new file mode 100644 index 0000000..7ccbde0 Binary files /dev/null and b/data/masks/head_wm1_purse_UL_msk.tga differ diff --git a/data/masks/head_wm1_purse_UR_msk.tga b/data/masks/head_wm1_purse_UR_msk.tga new file mode 100644 index 0000000..bc6834e Binary files /dev/null and b/data/masks/head_wm1_purse_UR_msk.tga differ diff --git a/data/masks/head_wm1_squintInner_L_msk.tga b/data/masks/head_wm1_squintInner_L_msk.tga new file mode 100644 index 0000000..cc09c13 Binary files /dev/null and b/data/masks/head_wm1_squintInner_L_msk.tga differ diff --git a/data/masks/head_wm1_squintInner_R_msk.tga b/data/masks/head_wm1_squintInner_R_msk.tga new file mode 100644 index 0000000..7517d61 Binary files /dev/null and b/data/masks/head_wm1_squintInner_R_msk.tga differ diff --git a/data/masks/head_wm2_browsDown_L_msk.tga b/data/masks/head_wm2_browsDown_L_msk.tga new file mode 100644 index 0000000..fb11855 Binary files /dev/null and b/data/masks/head_wm2_browsDown_L_msk.tga differ diff --git a/data/masks/head_wm2_browsDown_R_msk.tga b/data/masks/head_wm2_browsDown_R_msk.tga new file mode 100644 index 0000000..8b1e2dd Binary files /dev/null and b/data/masks/head_wm2_browsDown_R_msk.tga differ diff --git a/data/masks/head_wm2_browsLateral_L_msk.tga b/data/masks/head_wm2_browsLateral_L_msk.tga new file mode 100644 index 0000000..ae58d2e Binary files /dev/null and b/data/masks/head_wm2_browsLateral_L_msk.tga differ diff --git a/data/masks/head_wm2_browsLateral_R_msk.tga b/data/masks/head_wm2_browsLateral_R_msk.tga new file mode 100644 index 0000000..108e19f Binary files /dev/null and b/data/masks/head_wm2_browsLateral_R_msk.tga differ diff --git a/data/masks/head_wm2_mouthStretch_L_msk.tga b/data/masks/head_wm2_mouthStretch_L_msk.tga new file mode 100644 index 0000000..2a5e7e4 Binary files /dev/null and b/data/masks/head_wm2_mouthStretch_L_msk.tga differ diff --git a/data/masks/head_wm2_mouthStretch_R_msk.tga b/data/masks/head_wm2_mouthStretch_R_msk.tga new file mode 100644 index 0000000..6c6e2fc Binary files /dev/null and b/data/masks/head_wm2_mouthStretch_R_msk.tga differ diff --git a/data/masks/head_wm2_neckStretch_L_msk.tga b/data/masks/head_wm2_neckStretch_L_msk.tga new file mode 100644 index 0000000..0f65e73 Binary files /dev/null and b/data/masks/head_wm2_neckStretch_L_msk.tga differ diff --git a/data/masks/head_wm2_neckStretch_R_msk.tga b/data/masks/head_wm2_neckStretch_R_msk.tga new file mode 100644 index 0000000..3fe8b45 Binary files /dev/null and b/data/masks/head_wm2_neckStretch_R_msk.tga differ diff --git a/data/masks/head_wm2_noseWrinkler_L_msk.tga b/data/masks/head_wm2_noseWrinkler_L_msk.tga new file mode 100644 index 0000000..837ae6a Binary files /dev/null and b/data/masks/head_wm2_noseWrinkler_L_msk.tga differ diff --git a/data/masks/head_wm2_noseWrinkler_R_msk.tga b/data/masks/head_wm2_noseWrinkler_R_msk.tga new file mode 100644 index 0000000..8263f14 Binary files /dev/null and b/data/masks/head_wm2_noseWrinkler_R_msk.tga differ diff --git a/data/masks/head_wm3_cheekRaiseInner_L_msk.tga b/data/masks/head_wm3_cheekRaiseInner_L_msk.tga new file mode 100644 index 0000000..8b31fa5 Binary files /dev/null and b/data/masks/head_wm3_cheekRaiseInner_L_msk.tga differ diff --git a/data/masks/head_wm3_cheekRaiseInner_R_msk.tga b/data/masks/head_wm3_cheekRaiseInner_R_msk.tga new file mode 100644 index 0000000..e3247c4 Binary files /dev/null and b/data/masks/head_wm3_cheekRaiseInner_R_msk.tga differ diff --git a/data/masks/head_wm3_cheekRaiseOuter_L_msk.tga b/data/masks/head_wm3_cheekRaiseOuter_L_msk.tga new file mode 100644 index 0000000..32ea124 Binary files /dev/null and b/data/masks/head_wm3_cheekRaiseOuter_L_msk.tga differ diff --git a/data/masks/head_wm3_cheekRaiseOuter_R_msk.tga b/data/masks/head_wm3_cheekRaiseOuter_R_msk.tga new file mode 100644 index 0000000..8dbcbda Binary files /dev/null and b/data/masks/head_wm3_cheekRaiseOuter_R_msk.tga differ diff --git a/data/masks/head_wm3_cheekRaiseUpper_L_msk.tga b/data/masks/head_wm3_cheekRaiseUpper_L_msk.tga new file mode 100644 index 0000000..1b70680 Binary files /dev/null and b/data/masks/head_wm3_cheekRaiseUpper_L_msk.tga differ diff --git a/data/masks/head_wm3_cheekRaiseUpper_R_msk.tga b/data/masks/head_wm3_cheekRaiseUpper_R_msk.tga new file mode 100644 index 0000000..fb614a2 Binary files /dev/null and b/data/masks/head_wm3_cheekRaiseUpper_R_msk.tga differ diff --git a/data/masks/head_wm3_smile_L_msk.tga b/data/masks/head_wm3_smile_L_msk.tga new file mode 100644 index 0000000..5ae0e66 Binary files /dev/null and b/data/masks/head_wm3_smile_L_msk.tga differ diff --git a/data/masks/head_wm3_smile_R_msk.tga b/data/masks/head_wm3_smile_R_msk.tga new file mode 100644 index 0000000..9670957 Binary files /dev/null and b/data/masks/head_wm3_smile_R_msk.tga differ diff --git a/data/shader.ma b/data/shader.ma new file mode 100644 index 0000000..5fca5e3 --- /dev/null +++ b/data/shader.ma @@ -0,0 +1,8545 @@ +//Maya ASCII 2018ff09 scene +//Name: head_shader.ma +//Last modified: Thu, May 11, 2023 11:07:07 AM +//Codeset: 1252 +requires maya "2018ff09"; +requires -nodeType "dx11Shader" "dx11Shader" "1.0"; +requires "stereoCamera" "10.0"; +currentUnit -l centimeter -a degree -t film; +fileInfo "application" "maya"; +fileInfo "product" "Maya 2018"; +fileInfo "version" "2018"; +fileInfo "cutIdentifier" "201903222215-65bada0e52"; +fileInfo "osv" "Microsoft Windows 8 Enterprise Edition, 64-bit (Build 9200)\n"; +createNode transform -s -n "persp"; + rename -uid "CD1D855B-4CC1-03B9-E8CC-E6BF4F8A8291"; + setAttr ".v" no; + setAttr ".t" -type "double3" 24.558818622337995 37.536741765596531 49.473419305101473 ; + setAttr ".r" -type "double3" -34.200000000000081 26.400000000000034 0 ; +createNode camera -s -n "perspShape" -p "persp"; + rename -uid "F3CA1968-42E0-2562-D48E-8E92D22FAA9E"; + setAttr -k off ".v" no; + setAttr ".fl" 34.999999999999993; + setAttr ".ncp" 5; + setAttr ".fcp" 5000; + setAttr ".coi" 66.781447814796309; + setAttr ".imn" -type "string" "persp"; + setAttr ".den" -type "string" "persp_depth"; + setAttr ".man" -type "string" "persp_mask"; + setAttr ".hc" -type "string" "viewSet -p %camera"; +createNode transform -s -n "top"; + rename -uid "454C4DAC-4672-A7BA-5681-D29524B95D6C"; + setAttr ".v" no; + setAttr ".t" -type "double3" 0 1000.1 0 ; + setAttr ".r" -type "double3" -89.999999999999986 0 0 ; +createNode camera -s -n "topShape" -p "top"; + rename -uid "10346C6E-4959-FD63-4770-EB86C0DA9A0F"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 1000.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "top"; + setAttr ".den" -type "string" "top_depth"; + setAttr ".man" -type "string" "top_mask"; + setAttr ".hc" -type "string" "viewSet -t %camera"; + setAttr ".o" yes; +createNode transform -s -n "front"; + rename -uid "438A88D8-4C74-4308-4781-ED938937582F"; + setAttr ".v" no; + setAttr ".t" -type "double3" 0 0 1000.1 ; +createNode camera -s -n "frontShape" -p "front"; + rename -uid "91186241-41E7-C094-8F4D-EC8E7485B54C"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 1000.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "front"; + setAttr ".den" -type "string" "front_depth"; + setAttr ".man" -type "string" "front_mask"; + setAttr ".hc" -type "string" "viewSet -f %camera"; + setAttr ".o" yes; +createNode transform -s -n "side"; + rename -uid "DE4B3D3E-436D-1678-9588-73BCCD1336B9"; + setAttr ".v" no; + setAttr ".t" -type "double3" 1000.1 0 0 ; + setAttr ".r" -type "double3" 0 89.999999999999986 0 ; +createNode camera -s -n "sideShape" -p "side"; + rename -uid "EC4CA487-46D7-CDDE-6A85-A1AB658FF36B"; + setAttr -k off ".v" no; + setAttr ".rnd" no; + setAttr ".coi" 1000.1; + setAttr ".ow" 30; + setAttr ".imn" -type "string" "side"; + setAttr ".den" -type "string" "side_depth"; + setAttr ".man" -type "string" "side_mask"; + setAttr ".hc" -type "string" "viewSet -s %camera"; + setAttr ".o" yes; +createNode lightLinker -s -n "lightLinker1"; + rename -uid "712B377D-4D04-ED6F-9279-4E87D1D1F47D"; + setAttr -s 11 ".lnk"; + setAttr -s 11 ".slnk"; +createNode shapeEditorManager -n "shapeEditorManager"; + rename -uid "72D2669D-45F9-DDB6-D9BF-9F83176C46B7"; +createNode poseInterpolatorManager -n "poseInterpolatorManager"; + rename -uid "2407C35D-4457-2733-8A7D-5D904E5DE24C"; + setAttr -s 3 ".tpdt"; + setAttr ".tpdt[0].tpcd" -type "Int32Array" 1 -1 ; + setAttr ".tpdt[1].tpcd" -type "Int32Array" 1 -3 ; + setAttr ".tpdt[1].tpdn" -type "string" "skeleton_015"; + setAttr ".tpdt[3].tppi" 1; + setAttr ".tpdt[3].tpdn" -type "string" "bodyPoseRederSetup"; +createNode displayLayerManager -n "layerManager"; + rename -uid "79BFC8EF-470A-40F6-E1D2-E789AB9B3B69"; + setAttr -s 16 ".dli[1:15]" 1 2 3 4 5 6 7 8 + 9 10 11 12 13 14 15; +createNode displayLayer -n "defaultLayer"; + rename -uid "B6FB5592-4878-4F42-CE19-96A588BDA53F"; +createNode renderLayerManager -n "renderLayerManager"; + rename -uid "1B641219-4575-A2AC-6492-3CAA2ECDD1E4"; +createNode renderLayer -n "defaultRenderLayer"; + rename -uid "4ECCDAA8-40DA-ADF4-1313-AC86E060F1AE"; + setAttr ".g" yes; +createNode nodeGraphEditorInfo -n "hyperShadePrimaryNodeEditorSavedTabsInfo"; + rename -uid "9FE00233-4A46-74DA-D6BA-018CBBE3D871"; + setAttr ".def" no; + setAttr ".tgi[0].tn" -type "string" "Untitled_1"; + setAttr ".tgi[0].vl" -type "double2" -330.95236780151544 1.1904761431709079 ; + setAttr ".tgi[0].vh" -type "double2" 317.85713022663526 338.09522466054096 ; +createNode script -n "uiConfigurationScriptNode"; + rename -uid "E113578C-46E2-6EF6-76C1-30A7C20853B8"; + setAttr ".b" -type "string" ( + "// Maya Mel UI Configuration File.\n//\n// This script is machine generated. Edit at your own risk.\n//\n//\n\nglobal string $gMainPane;\nif (`paneLayout -exists $gMainPane`) {\n\n\tglobal int $gUseScenePanelConfig;\n\tint $useSceneConfig = $gUseScenePanelConfig;\n\tint $nodeEditorPanelVisible = stringArrayContains(\"nodeEditorPanel1\", `getPanel -vis`);\n\tint $nodeEditorWorkspaceControlOpen = (`workspaceControl -exists nodeEditorPanel1Window` && `workspaceControl -q -visible nodeEditorPanel1Window`);\n\tint $menusOkayInPanels = `optionVar -q allowMenusInPanels`;\n\tint $nVisPanes = `paneLayout -q -nvp $gMainPane`;\n\tint $nPanes = 0;\n\tstring $editorName;\n\tstring $panelName;\n\tstring $itemFilterName;\n\tstring $panelConfig;\n\n\t//\n\t// get current state of the UI\n\t//\n\tsceneUIReplacement -update $gMainPane;\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Top View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Top View\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\t$editorName = $panelName;\n modelEditor -e \n -docTag \"RADRENDER\" \n -editorChanged \"updateModelPanelBar\" \n -camera \"top\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 32768\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n" + + " -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n" + + " -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n" + + " $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Side View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Side View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -docTag \"RADRENDER\" \n -editorChanged \"updateModelPanelBar\" \n -camera \"side\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n" + + " -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 32768\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n" + + " -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n" + + " -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Front View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Front View\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n modelEditor -e \n -docTag \"RADRENDER\" \n -editorChanged \"updateModelPanelBar\" \n -camera \"front\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n" + + " -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 32768\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n" + + " -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n" + + " -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 1\n -height 1\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"modelPanel\" (localizedPanelLabel(\"Persp View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tmodelPanel -edit -l (localizedPanelLabel(\"Persp View\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\t$editorName = $panelName;\n modelEditor -e \n -docTag \"RADRENDER\" \n -editorChanged \"updateModelPanelBar\" \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"all\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 1\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 32768\n -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n" + + " -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererName \"vp2Renderer\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 256 256 \n -bumpResolution 512 512 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 1\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n" + + " -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 0\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n -clipGhosts 1\n -greasePencils 1\n -shadows 1\n -captureSequenceNumber -1\n -width 1319\n -height 626\n -sceneRenderFilter 0\n $editorName;\n modelEditor -e -viewSelected 0 $editorName;\n modelEditor -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n" + + " $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showParentContainers 0\n" + + " -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n" + + " -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -selectCommand \"\" \n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"Outliner\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"Outliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 0\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n" + + " -showReferenceMembers 0\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n" + + " -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"graphEditor\" (localizedPanelLabel(\"Graph Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Graph Editor\")) -mbv $menusOkayInPanels $panelName;\n" + + "\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 1\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showParentContainers 1\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 0\n -showLeafs 1\n -showNumericAttrsOnly 1\n" + + " -highlightActive 0\n -autoSelectNewObjects 1\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 1\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 1\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n" + + " -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"GraphEd\");\n animCurveEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 1\n -displayInfinities 0\n -displayValues 0\n -autoFit 1\n -autoFitTime 0\n -snapTime \"integer\" \n -snapValue \"none\" \n -showResults \"off\" \n -showBufferCurves \"off\" \n -smoothness \"fine\" \n -resultSamples 1\n -resultScreenSamples 0\n -resultUpdate \"delayed\" \n -showUpstreamCurves 1\n -showCurveNames 0\n -showActiveCurveNames 0\n -stackedCurves 0\n -stackedCurvesMin -1\n -stackedCurvesMax 1\n -stackedCurvesSpace 0.2\n -displayNormalized 0\n -preSelectionHighlight 0\n" + + " -constrainDrag 0\n -classicMode 1\n -valueLinesToggle 1\n -outliner \"graphEditor1OutlineEd\" \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dopeSheetPanel\" (localizedPanelLabel(\"Dope Sheet\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dope Sheet\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"OutlineEd\");\n outlinerEditor -e \n -showShapes 1\n -showAssignedMaterials 0\n -showTimeEditor 1\n -showReferenceNodes 0\n -showReferenceMembers 0\n -showAttributes 1\n -showConnected 1\n -showAnimCurvesOnly 1\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n" + + " -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 0\n -showAssets 1\n -showContainedOnly 0\n -showPublishedAsConnected 0\n -showParentContainers 1\n -showContainerContents 0\n -ignoreDagHierarchy 0\n -expandConnections 1\n -showUpstreamCurves 1\n -showUnitlessCurves 0\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 1\n -highlightActive 0\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 1\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"0\" \n -showSetMembers 0\n -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n" + + " -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 1\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n $editorName;\n\n\t\t\t$editorName = ($panelName+\"DopeSheetEd\");\n dopeSheetEditor -e \n -displayKeys 1\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -autoFitTime 0\n -snapTime \"integer\" \n -snapValue \"none\" \n" + + " -outliner \"dopeSheetPanel1OutlineEd\" \n -showSummary 1\n -showScene 0\n -hierarchyBelow 0\n -showTicks 1\n -selectionWindow 0 0 0 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"timeEditorPanel\" (localizedPanelLabel(\"Time Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Time Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"clipEditorPanel\" (localizedPanelLabel(\"Trax Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Trax Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = clipEditorNameFromPanel($panelName);\n clipEditor -e \n" + + " -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -autoFitTime 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 0 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"sequenceEditorPanel\" (localizedPanelLabel(\"Camera Sequencer\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Camera Sequencer\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = sequenceEditorNameFromPanel($panelName);\n clipEditor -e \n -displayKeys 0\n -displayTangents 0\n -displayActiveKeys 0\n -displayActiveKeyTangents 0\n" + + " -displayInfinities 0\n -displayValues 0\n -autoFit 0\n -autoFitTime 0\n -snapTime \"none\" \n -snapValue \"none\" \n -initialized 0\n -manageSequencer 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperGraphPanel\" (localizedPanelLabel(\"Hypergraph Hierarchy\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypergraph Hierarchy\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"HyperGraphEd\");\n hyperGraph -e \n -graphLayoutStyle \"hierarchicalLayout\" \n -orientation \"horiz\" \n -mergeConnections 0\n -zoom 1\n -animateTransition 0\n -showRelationships 1\n -showShapes 0\n -showDeformers 0\n -showExpressions 0\n" + + " -showConstraints 0\n -showConnectionFromSelected 0\n -showConnectionToSelected 0\n -showConstraintLabels 0\n -showUnderworld 0\n -showInvisible 0\n -transitionFrames 1\n -opaqueContainers 0\n -freeform 0\n -image \"C:/work/Batman/characters/Bane/sourceimages/Bane_tpage_2048.tga\" \n -imagePosition 0 0 \n -imageScale 1\n -imageEnabled 0\n -graphType \"DAG\" \n -heatMapDisplay 0\n -updateSelection 1\n -updateNodeAdded 1\n -useDrawOverrideColor 0\n -limitGraphTraversal -1\n -range 0 0 \n -iconSize \"smallIcons\" \n -showCachedConnections 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"hyperShadePanel\" (localizedPanelLabel(\"Hypershade\")) `;\n" + + "\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Hypershade\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"visorPanel\" (localizedPanelLabel(\"Visor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Visor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"nodeEditorPanel\" (localizedPanelLabel(\"Node Editor\")) `;\n\tif ($nodeEditorPanelVisible || $nodeEditorWorkspaceControlOpen) {\n\t\tif (\"\" == $panelName) {\n\t\t\tif ($useSceneConfig) {\n\t\t\t\t$panelName = `scriptedPanel -unParent -type \"nodeEditorPanel\" -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels `;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n" + + " -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -connectNodeOnCreation 0\n -connectOnDrop 0\n -copyConnectionsOnPaste 0\n -connectionStyle \"bezier\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -crosshairOnEdgeDragging 0\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -editorMode \"default\" \n" + + " $editorName;\n\t\t\t}\n\t\t} else {\n\t\t\t$label = `panel -q -label $panelName`;\n\t\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Node Editor\")) -mbv $menusOkayInPanels $panelName;\n\n\t\t\t$editorName = ($panelName+\"NodeEditorEd\");\n nodeEditor -e \n -allAttributes 0\n -allNodes 0\n -autoSizeNodes 1\n -consistentNameSize 1\n -createNodeCommand \"nodeEdCreateNodeCommand\" \n -connectNodeOnCreation 0\n -connectOnDrop 0\n -copyConnectionsOnPaste 0\n -connectionStyle \"bezier\" \n -defaultPinnedState 0\n -additiveGraphingMode 0\n -settingsChangedCallback \"nodeEdSyncControls\" \n -traversalDepthLimit -1\n -keyPressCommand \"nodeEdKeyPressCommand\" \n -nodeTitleMode \"name\" \n -gridSnap 0\n -gridVisibility 1\n -crosshairOnEdgeDragging 0\n -popupMenuScript \"nodeEdBuildPanelMenus\" \n" + + " -showNamespace 1\n -showShapes 1\n -showSGShapes 0\n -showTransforms 1\n -useAssets 1\n -syncedSelection 1\n -extendToShapes 1\n -editorMode \"default\" \n $editorName;\n\t\t\tif (!$useSceneConfig) {\n\t\t\t\tpanel -e -l $label $panelName;\n\t\t\t}\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"createNodePanel\" (localizedPanelLabel(\"Create Node\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Create Node\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"polyTexturePlacementPanel\" (localizedPanelLabel(\"UV Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"UV Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n" + + "\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"renderWindowPanel\" (localizedPanelLabel(\"Render View\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Render View\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"shapePanel\" (localizedPanelLabel(\"Shape Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tshapePanel -edit -l (localizedPanelLabel(\"Shape Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"posePanel\" (localizedPanelLabel(\"Pose Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tposePanel -edit -l (localizedPanelLabel(\"Pose Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n" + + "\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynRelEdPanel\" (localizedPanelLabel(\"Dynamic Relationships\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Dynamic Relationships\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"relationshipPanel\" (localizedPanelLabel(\"Relationship Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Relationship Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"referenceEditorPanel\" (localizedPanelLabel(\"Reference Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Reference Editor\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"componentEditorPanel\" (localizedPanelLabel(\"Component Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Component Editor\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"dynPaintScriptedPanelType\" (localizedPanelLabel(\"Paint Effects\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Paint Effects\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"scriptEditorPanel\" (localizedPanelLabel(\"Script Editor\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Script Editor\")) -mbv $menusOkayInPanels $panelName;\n" + + "\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"profilerPanel\" (localizedPanelLabel(\"Profiler Tool\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Profiler Tool\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"contentBrowserPanel\" (localizedPanelLabel(\"Content Browser\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Content Browser\")) -mbv $menusOkayInPanels $panelName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextScriptedPanel \"Stereo\" (localizedPanelLabel(\"Stereo\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\tscriptedPanel -edit -l (localizedPanelLabel(\"Stereo\")) -mbv $menusOkayInPanels $panelName;\n" + + "string $editorName = ($panelName+\"Editor\");\n stereoCameraView -e \n -editorChanged \"updateModelPanelBar\" \n -camera \"persp\" \n -useInteractiveMode 0\n -displayLights \"default\" \n -displayAppearance \"smoothShaded\" \n -activeOnly 0\n -ignorePanZoom 0\n -wireframeOnShaded 0\n -headsUpDisplay 1\n -holdOuts 1\n -selectionHiliteDisplay 1\n -useDefaultMaterial 0\n -bufferMode \"double\" \n -twoSidedLighting 0\n -backfaceCulling 0\n -xray 0\n -jointXray 0\n -activeComponentsXray 0\n -displayTextures 0\n -smoothWireframe 0\n -lineWidth 1\n -textureAnisotropic 0\n -textureHilight 1\n -textureSampling 2\n -textureDisplay \"modulate\" \n -textureMaxSize 32768\n" + + " -fogging 0\n -fogSource \"fragment\" \n -fogMode \"linear\" \n -fogStart 0\n -fogEnd 100\n -fogDensity 0.1\n -fogColor 0.5 0.5 0.5 1 \n -depthOfFieldPreview 1\n -maxConstantTransparency 1\n -rendererOverrideName \"stereoOverrideVP2\" \n -objectFilterShowInHUD 1\n -isFiltered 0\n -colorResolution 4 4 \n -bumpResolution 4 4 \n -textureCompression 0\n -transparencyAlgorithm \"frontAndBackCull\" \n -transpInShadows 0\n -cullingOverride \"none\" \n -lowQualityLighting 0\n -maximumNumHardwareLights 0\n -occlusionCulling 0\n -shadingModel 0\n -useBaseRenderer 0\n -useReducedRenderer 0\n -smallObjectCulling 0\n -smallObjectThreshold -1 \n -interactiveDisableShadows 0\n" + + " -interactiveBackFaceCull 0\n -sortTransparent 1\n -controllers 1\n -nurbsCurves 1\n -nurbsSurfaces 1\n -polymeshes 1\n -subdivSurfaces 1\n -planes 1\n -lights 1\n -cameras 1\n -controlVertices 1\n -hulls 1\n -grid 1\n -imagePlane 1\n -joints 1\n -ikHandles 1\n -deformers 1\n -dynamics 1\n -particleInstancers 1\n -fluids 1\n -hairSystems 1\n -follicles 1\n -nCloths 1\n -nParticles 1\n -nRigids 1\n -dynamicConstraints 1\n -locators 1\n -manipulators 1\n -pluginShapes 1\n -dimensions 1\n -handles 1\n -pivots 1\n -textures 1\n -strokes 1\n -motionTrails 1\n" + + " -clipGhosts 1\n -greasePencils 1\n -shadows 0\n -captureSequenceNumber -1\n -width 0\n -height 0\n -sceneRenderFilter 0\n -displayMode \"centerEye\" \n -viewColor 0 0 0 1 \n -useCustomBackground 1\n $editorName;\n stereoCameraView -e -viewSelected 0 $editorName;\n stereoCameraView -e \n -pluginObjects \"gpuCacheDisplayFilter\" 1 \n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n\t\t}\n\t}\n\n\n\t$panelName = `sceneUIReplacement -getNextPanel \"outlinerPanel\" (localizedPanelLabel(\"ToggledOutliner\")) `;\n\tif (\"\" != $panelName) {\n\t\t$label = `panel -q -label $panelName`;\n\t\toutlinerPanel -edit -l (localizedPanelLabel(\"ToggledOutliner\")) -mbv $menusOkayInPanels $panelName;\n\t\t$editorName = $panelName;\n outlinerEditor -e \n -docTag \"isolOutln_fromSeln\" \n -showShapes 0\n -showAssignedMaterials 0\n" + + " -showTimeEditor 1\n -showReferenceNodes 1\n -showReferenceMembers 1\n -showAttributes 0\n -showConnected 0\n -showAnimCurvesOnly 0\n -showMuteInfo 0\n -organizeByLayer 1\n -organizeByClip 1\n -showAnimLayerWeight 1\n -autoExpandLayers 1\n -autoExpand 0\n -showDagOnly 1\n -showAssets 1\n -showContainedOnly 1\n -showPublishedAsConnected 0\n -showParentContainers 0\n -showContainerContents 1\n -ignoreDagHierarchy 0\n -expandConnections 0\n -showUpstreamCurves 1\n -showUnitlessCurves 1\n -showCompounds 1\n -showLeafs 1\n -showNumericAttrsOnly 0\n -highlightActive 1\n -autoSelectNewObjects 0\n -doNotSelectNewObjects 0\n -dropIsParent 1\n -transmitFilters 0\n -setFilter \"defaultSetFilter\" \n -showSetMembers 1\n" + + " -allowMultiSelection 1\n -alwaysToggleSelect 0\n -directSelect 0\n -isSet 0\n -isSetMember 0\n -displayMode \"DAG\" \n -expandObjects 0\n -setsIgnoreFilters 1\n -containersIgnoreFilters 0\n -editAttrName 0\n -showAttrValues 0\n -highlightSecondary 0\n -showUVAttrsOnly 0\n -showTextureNodesOnly 0\n -attrAlphaOrder \"default\" \n -animLayerFilterOptions \"allAffecting\" \n -sortOrder \"none\" \n -longNames 0\n -niceNames 1\n -selectCommand \"pass\" \n -showNamespace 1\n -showPinIcons 0\n -mapMotionTrails 0\n -ignoreHiddenAttribute 0\n -ignoreOutlinerColor 0\n -renderFilterVisible 0\n -renderFilterIndex 0\n -selectionOrder \"chronological\" \n -expandAttribute 0\n $editorName;\n\t\tif (!$useSceneConfig) {\n\t\t\tpanel -e -l $label $panelName;\n" + + "\t\t}\n\t}\n\n\n\tif ($useSceneConfig) {\n string $configName = `getPanel -cwl (localizedPanelLabel(\"Current Layout\"))`;\n if (\"\" != $configName) {\n\t\t\tpanelConfiguration -edit -label (localizedPanelLabel(\"Current Layout\")) \n\t\t\t\t-userCreated false\n\t\t\t\t-defaultImage \"vacantCell.xP:/\"\n\t\t\t\t-image \"\"\n\t\t\t\t-sc false\n\t\t\t\t-configString \"global string $gMainPane; paneLayout -e -cn \\\"single\\\" -ps 1 100 100 $gMainPane;\"\n\t\t\t\t-removeAllPanels\n\t\t\t\t-ap false\n\t\t\t\t\t(localizedPanelLabel(\"Persp View\")) \n\t\t\t\t\t\"modelPanel\"\n" + + "\t\t\t\t\t\"$panelName = `modelPanel -unParent -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels `;\\n$editorName = $panelName;\\nmodelEditor -e \\n -docTag \\\"RADRENDER\\\" \\n -editorChanged \\\"updateModelPanelBar\\\" \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"all\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 1\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 32768\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 0\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 1\\n -captureSequenceNumber -1\\n -width 1319\\n -height 626\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + + "\t\t\t\t\t\"modelPanel -edit -l (localizedPanelLabel(\\\"Persp View\\\")) -mbv $menusOkayInPanels $panelName;\\n$editorName = $panelName;\\nmodelEditor -e \\n -docTag \\\"RADRENDER\\\" \\n -editorChanged \\\"updateModelPanelBar\\\" \\n -cam `findStartUpCamera persp` \\n -useInteractiveMode 0\\n -displayLights \\\"all\\\" \\n -displayAppearance \\\"smoothShaded\\\" \\n -activeOnly 0\\n -ignorePanZoom 0\\n -wireframeOnShaded 0\\n -headsUpDisplay 1\\n -holdOuts 1\\n -selectionHiliteDisplay 1\\n -useDefaultMaterial 0\\n -bufferMode \\\"double\\\" \\n -twoSidedLighting 0\\n -backfaceCulling 0\\n -xray 0\\n -jointXray 0\\n -activeComponentsXray 0\\n -displayTextures 1\\n -smoothWireframe 0\\n -lineWidth 1\\n -textureAnisotropic 0\\n -textureHilight 1\\n -textureSampling 2\\n -textureDisplay \\\"modulate\\\" \\n -textureMaxSize 32768\\n -fogging 0\\n -fogSource \\\"fragment\\\" \\n -fogMode \\\"linear\\\" \\n -fogStart 0\\n -fogEnd 100\\n -fogDensity 0.1\\n -fogColor 0.5 0.5 0.5 1 \\n -depthOfFieldPreview 1\\n -maxConstantTransparency 1\\n -rendererName \\\"vp2Renderer\\\" \\n -objectFilterShowInHUD 1\\n -isFiltered 0\\n -colorResolution 256 256 \\n -bumpResolution 512 512 \\n -textureCompression 0\\n -transparencyAlgorithm \\\"frontAndBackCull\\\" \\n -transpInShadows 0\\n -cullingOverride \\\"none\\\" \\n -lowQualityLighting 0\\n -maximumNumHardwareLights 1\\n -occlusionCulling 0\\n -shadingModel 0\\n -useBaseRenderer 0\\n -useReducedRenderer 0\\n -smallObjectCulling 0\\n -smallObjectThreshold -1 \\n -interactiveDisableShadows 0\\n -interactiveBackFaceCull 0\\n -sortTransparent 1\\n -controllers 1\\n -nurbsCurves 1\\n -nurbsSurfaces 1\\n -polymeshes 1\\n -subdivSurfaces 1\\n -planes 1\\n -lights 1\\n -cameras 1\\n -controlVertices 1\\n -hulls 1\\n -grid 1\\n -imagePlane 1\\n -joints 0\\n -ikHandles 1\\n -deformers 1\\n -dynamics 1\\n -particleInstancers 1\\n -fluids 1\\n -hairSystems 1\\n -follicles 1\\n -nCloths 1\\n -nParticles 1\\n -nRigids 1\\n -dynamicConstraints 1\\n -locators 1\\n -manipulators 1\\n -pluginShapes 1\\n -dimensions 1\\n -handles 1\\n -pivots 1\\n -textures 1\\n -strokes 1\\n -motionTrails 1\\n -clipGhosts 1\\n -greasePencils 1\\n -shadows 1\\n -captureSequenceNumber -1\\n -width 1319\\n -height 626\\n -sceneRenderFilter 0\\n $editorName;\\nmodelEditor -e -viewSelected 0 $editorName;\\nmodelEditor -e \\n -pluginObjects \\\"gpuCacheDisplayFilter\\\" 1 \\n $editorName\"\n" + + "\t\t\t\t$configName;\n\n setNamedPanelLayout (localizedPanelLabel(\"Current Layout\"));\n }\n\n panelHistory -e -clear mainPanelHistory;\n sceneUIReplacement -clear;\n\t}\n\n\ngrid -spacing 5 -size 12 -divisions 5 -displayAxes yes -displayGridLines yes -displayDivisionLines yes -displayPerspectiveLabels no -displayOrthographicLabels no -displayAxesBold yes -perspectiveLabelPosition axis -orthographicLabelPosition edge;\nviewManip -drawCompass 0 -compassAngle 0 -frontParameters \"1 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000\" -homeParameters \"\" -selectionLockParameters \"\";\n}\n"); + setAttr ".st" 3; +createNode script -n "sceneConfigurationScriptNode"; + rename -uid "52A90A50-49D6-A85B-C0B8-41AF6075B53A"; + setAttr ".b" -type "string" "playbackOptions -min 0 -max 40 -ast 0 -aet 200 "; + setAttr ".st" 6; +createNode dx11Shader -n "shader_head_shader"; + rename -uid "DB32AAEB-43AB-449E-DBF5-E882184E97ED"; + addAttr -s false -is true -ci true -k true -sn "te" -ln "techniqueEnum" -nn "Technique" + -ct "HW_shader_parameter" -min 0 -max 2 -en "TessellationOFF" -at "enum"; + addAttr -ci true -sn "Light_0_use_implicit_lighting" -ln "Light_0_use_implicit_lighting" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -s false -ci true -sn "Light_0_connected_light" -ln "Light_0_connected_light" + -ct "HW_shader_parameter" -at "message"; + addAttr -ci true -sn "Light_1_use_implicit_lighting" -ln "Light_1_use_implicit_lighting" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -s false -ci true -sn "Light_1_connected_light" -ln "Light_1_connected_light" + -ct "HW_shader_parameter" -at "message"; + addAttr -ci true -sn "Light_2_use_implicit_lighting" -ln "Light_2_use_implicit_lighting" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -s false -ci true -sn "Light_2_connected_light" -ln "Light_2_connected_light" + -ct "HW_shader_parameter" -at "message"; + addAttr -is true -ci true -h true -sn "SuperFilterTaps_Name" -ln "SuperFilterTaps_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SuperFilterTaps_Type" -ln "SuperFilterTaps_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SuperFilterTaps" -ln "SuperFilterTaps" -ct "HW_shader_parameter" + -at "float2" -nc 2; + addAttr -is true -ci true -sn "SuperFilterTapsX" -ln "SuperFilterTapsX" -ct "HW_shader_parameter" + -dv -0.84052002429962158 -smn 0 -smx 1 -at "float" -p "SuperFilterTaps"; + addAttr -is true -ci true -sn "SuperFilterTapsY" -ln "SuperFilterTapsY" -ct "HW_shader_parameter" + -dv -0.073954001069068909 -smn 0 -smx 1 -at "float" -p "SuperFilterTaps"; + addAttr -is true -ci true -h true -sn "shadowMapTexelSize_Name" -ln "shadowMapTexelSize_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowMapTexelSize_Type" -ln "shadowMapTexelSize_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowMapTexelSize" -ln "shadowMapTexelSize" + -ct "HW_shader_parameter" -dv 0.0019531298894435167 -smn 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "LinearSpaceLighting_Name" -ln "LinearSpaceLighting_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "LinearSpaceLighting_Type" -ln "LinearSpaceLighting_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "LinearSpaceLighting" -ln "LinearSpaceLighting" + -nn "Linear Space Lighting" -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "UseShadows_Name" -ln "UseShadows_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "UseShadows_Type" -ln "UseShadows_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "UseShadows" -ln "UseShadows" -nn "Shadows" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "shadowMultiplier_Name" -ln "shadowMultiplier_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowMultiplier_Type" -ln "shadowMultiplier_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "shadowMultiplier" -ln "shadowMultiplier" + -nn "Shadow Strength" -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "float"; + addAttr -is true -ci true -h true -sn "IsSwatchRender_Name" -ln "IsSwatchRender_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "IsSwatchRender_Type" -ln "IsSwatchRender_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "IsSwatchRender" -ln "IsSwatchRender" -ct "HW_shader_parameter" + -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "shadowDepthBias_Name" -ln "shadowDepthBias_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowDepthBias_Type" -ln "shadowDepthBias_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "shadowDepthBias" -ln "shadowDepthBias" -nn "Shadow Bias" + -ct "HW_shader_parameter" -dv 0.0099999997764825821 -min 0 -smx 10 -at "float"; + addAttr -is true -ci true -h true -sn "MayaFullScreenGamma_Name" -ln "MayaFullScreenGamma_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "MayaFullScreenGamma_Type" -ln "MayaFullScreenGamma_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "MayaFullScreenGamma" -ln "MayaFullScreenGamma" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "flipBackfaceNormals_Name" -ln "flipBackfaceNormals_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "flipBackfaceNormals_Type" -ln "flipBackfaceNormals_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "flipBackfaceNormals" -ln "flipBackfaceNormals" + -nn "Double Sided Lighting" -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "light0Enable_Name" -ln "light0Enable_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0Enable_Type" -ln "light0Enable_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light0Enable" -ln "light0Enable" -nn "Enable Light 0" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "light0Type_Name" -ln "light0Type_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light0Type_Type" -ln "light0Type_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light0Type" -ln "light0Type" -nn "Light 0 Type" + -ct "HW_shader_parameter" -dv 2 -min 0 -max 5 -smn 0 -smx 1 -en "None:Default:Spot:Point:Directional:Ambient" + -at "enum"; + addAttr -is true -ci true -h true -sn "light0Pos_Name" -ln "light0Pos_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light0Pos_Type" -ln "light0Pos_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light0Pos" -ln "light0Pos" -nn "Light 0 Position" + -ct "HW_shader_parameter" -at "matrix"; + addAttr -is true -ci true -h true -sn "light0Color_Name" -ln "light0Color_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0Color_Type" -ln "light0Color_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -k true -sn "light0Color" -ln "light0Color" -nn "Light 0 Color" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "light0ColorR" -ln "light0ColorR" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light0Color"; + addAttr -is true -ci true -sn "light0ColorG" -ln "light0ColorG" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light0Color"; + addAttr -is true -ci true -sn "light0ColorB" -ln "light0ColorB" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light0Color"; + addAttr -is true -ci true -h true -sn "light0Intensity_Name" -ln "light0Intensity_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0Intensity_Type" -ln "light0Intensity_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light0Intensity" -ln "light0Intensity" -nn "Light 0 Intensity" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -at "float"; + addAttr -is true -ci true -h true -sn "light0Dir_Name" -ln "light0Dir_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light0Dir_Type" -ln "light0Dir_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light0Dir" -ln "light0Dir" -nn "Light 0 Direction" + -ct "HW_shader_parameter" -at "matrix"; + addAttr -is true -ci true -h true -sn "light0ConeAngle_Name" -ln "light0ConeAngle_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0ConeAngle_Type" -ln "light0ConeAngle_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light0ConeAngle" -ln "light0ConeAngle" -nn "Light 0 Cone Angle" + -ct "HW_shader_parameter" -dv 0.46000000834465027 -min 0 -max 1.5707962512969971 + -at "float"; + addAttr -is true -ci true -h true -sn "light0FallOff_Name" -ln "light0FallOff_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0FallOff_Type" -ln "light0FallOff_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light0FallOff" -ln "light0FallOff" -nn "Light 0 Penumbra Angle" + -ct "HW_shader_parameter" -dv 0.69999998807907104 -min 0 -max 1.5707962512969971 + -at "float"; + addAttr -is true -ci true -h true -sn "light0AttenScale_Name" -ln "light0AttenScale_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0AttenScale_Type" -ln "light0AttenScale_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light0AttenScale" -ln "light0AttenScale" + -nn "Light 0 Decay" -ct "HW_shader_parameter" -min 0 -max 99999 -at "float"; + addAttr -is true -ci true -h true -sn "light0ShadowOn_Name" -ln "light0ShadowOn_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0ShadowOn_Type" -ln "light0ShadowOn_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0ShadowOn" -ln "light0ShadowOn" -nn "Light 0 Casts Shadow" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "light1Enable_Name" -ln "light1Enable_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1Enable_Type" -ln "light1Enable_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light1Enable" -ln "light1Enable" -nn "Enable Light 1" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "light1Type_Name" -ln "light1Type_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light1Type_Type" -ln "light1Type_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light1Type" -ln "light1Type" -nn "Light 1 Type" + -ct "HW_shader_parameter" -dv 2 -min 0 -max 5 -smn 0 -smx 1 -en "None:Default:Spot:Point:Directional:Ambient" + -at "enum"; + addAttr -is true -ci true -h true -sn "light1Pos_Name" -ln "light1Pos_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light1Pos_Type" -ln "light1Pos_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light1Pos" -ln "light1Pos" -nn "Light 1 Position" + -ct "HW_shader_parameter" -at "matrix"; + addAttr -is true -ci true -h true -sn "light1Color_Name" -ln "light1Color_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1Color_Type" -ln "light1Color_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -k true -sn "light1Color" -ln "light1Color" -nn "Light 1 Color" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "light1ColorR" -ln "light1ColorR" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light1Color"; + addAttr -is true -ci true -sn "light1ColorG" -ln "light1ColorG" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light1Color"; + addAttr -is true -ci true -sn "light1ColorB" -ln "light1ColorB" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light1Color"; + addAttr -is true -ci true -h true -sn "light1Intensity_Name" -ln "light1Intensity_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1Intensity_Type" -ln "light1Intensity_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light1Intensity" -ln "light1Intensity" -nn "Light 1 Intensity" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -at "float"; + addAttr -is true -ci true -h true -sn "light1Dir_Name" -ln "light1Dir_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light1Dir_Type" -ln "light1Dir_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light1Dir" -ln "light1Dir" -nn "Light 1 Direction" + -ct "HW_shader_parameter" -at "matrix"; + addAttr -is true -ci true -h true -sn "light1ConeAngle_Name" -ln "light1ConeAngle_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1ConeAngle_Type" -ln "light1ConeAngle_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light1ConeAngle" -ln "light1ConeAngle" -nn "Light 1 Cone Angle" + -ct "HW_shader_parameter" -min 0 -max 1.5707962512969971 -at "float"; + addAttr -is true -ci true -h true -sn "light1FallOff_Name" -ln "light1FallOff_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1FallOff_Type" -ln "light1FallOff_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light1FallOff" -ln "light1FallOff" -nn "Light 1 Penumbra Angle" + -ct "HW_shader_parameter" -min 0 -max 1.5707962512969971 -at "float"; + addAttr -is true -ci true -h true -sn "light1AttenScale_Name" -ln "light1AttenScale_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1AttenScale_Type" -ln "light1AttenScale_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light1AttenScale" -ln "light1AttenScale" + -nn "Light 1 Decay" -ct "HW_shader_parameter" -min 0 -max 99999 -at "float"; + addAttr -is true -ci true -h true -sn "light1ShadowOn_Name" -ln "light1ShadowOn_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1ShadowOn_Type" -ln "light1ShadowOn_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1ShadowOn" -ln "light1ShadowOn" -nn "Light 1 Casts Shadow" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "light2Enable_Name" -ln "light2Enable_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2Enable_Type" -ln "light2Enable_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light2Enable" -ln "light2Enable" -nn "Enable Light 2" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "light2Type_Name" -ln "light2Type_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light2Type_Type" -ln "light2Type_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light2Type" -ln "light2Type" -nn "Light 2 Type" + -ct "HW_shader_parameter" -dv 2 -min 0 -max 5 -smn 0 -smx 1 -en "None:Default:Spot:Point:Directional:Ambient" + -at "enum"; + addAttr -is true -ci true -h true -sn "light2Pos_Name" -ln "light2Pos_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light2Pos_Type" -ln "light2Pos_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light2Pos" -ln "light2Pos" -nn "Light 2 Position" + -ct "HW_shader_parameter" -at "matrix"; + addAttr -is true -ci true -h true -sn "light2Color_Name" -ln "light2Color_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2Color_Type" -ln "light2Color_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -k true -sn "light2Color" -ln "light2Color" -nn "Light 2 Color" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "light2ColorR" -ln "light2ColorR" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light2Color"; + addAttr -is true -ci true -sn "light2ColorG" -ln "light2ColorG" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light2Color"; + addAttr -is true -ci true -sn "light2ColorB" -ln "light2ColorB" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light2Color"; + addAttr -is true -ci true -h true -sn "light2Intensity_Name" -ln "light2Intensity_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2Intensity_Type" -ln "light2Intensity_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light2Intensity" -ln "light2Intensity" -nn "Light 2 Intensity" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -at "float"; + addAttr -is true -ci true -h true -sn "light2Dir_Name" -ln "light2Dir_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light2Dir_Type" -ln "light2Dir_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light2Dir" -ln "light2Dir" -nn "Light 2 Direction" + -ct "HW_shader_parameter" -at "matrix"; + addAttr -is true -ci true -h true -sn "light2ConeAngle_Name" -ln "light2ConeAngle_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2ConeAngle_Type" -ln "light2ConeAngle_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light2ConeAngle" -ln "light2ConeAngle" -nn "Light 2 Cone Angle" + -ct "HW_shader_parameter" -min 0 -max 1.5707962512969971 -at "float"; + addAttr -is true -ci true -h true -sn "light2FallOff_Name" -ln "light2FallOff_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2FallOff_Type" -ln "light2FallOff_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light2FallOff" -ln "light2FallOff" -nn "Light 2 Penumbra Angle" + -ct "HW_shader_parameter" -min 0 -max 1.5707962512969971 -at "float"; + addAttr -is true -ci true -h true -sn "light2AttenScale_Name" -ln "light2AttenScale_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2AttenScale_Type" -ln "light2AttenScale_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light2AttenScale" -ln "light2AttenScale" + -nn "Light 2 Decay" -ct "HW_shader_parameter" -min 0 -max 99999 -at "float"; + addAttr -is true -ci true -h true -sn "light2ShadowOn_Name" -ln "light2ShadowOn_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2ShadowOn_Type" -ln "light2ShadowOn_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2ShadowOn" -ln "light2ShadowOn" -nn "Light 2 Casts Shadow" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "UseAmbientOcclusionTexture_Name" -ln "UseAmbientOcclusionTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseAmbientOcclusionTexture_Type" -ln "UseAmbientOcclusionTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseAmbientOcclusionTexture" -ln "UseAmbientOcclusionTexture" + -nn "Use Occlusion Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "transpDepthTexture_Name" -ln "transpDepthTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "transpDepthTexture_Type" -ln "transpDepthTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -h true -sn "transpDepthTexture" -ln "transpDepthTexture" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "transpDepthTextureR" -ln "transpDepthTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "transpDepthTexture"; + addAttr -is true -ci true -sn "transpDepthTextureG" -ln "transpDepthTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "transpDepthTexture"; + addAttr -is true -ci true -sn "transpDepthTextureB" -ln "transpDepthTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "transpDepthTexture"; + addAttr -is true -ci true -h true -sn "opaqueDepthTexture_Name" -ln "opaqueDepthTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "opaqueDepthTexture_Type" -ln "opaqueDepthTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -h true -sn "opaqueDepthTexture" -ln "opaqueDepthTexture" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "opaqueDepthTextureR" -ln "opaqueDepthTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "opaqueDepthTexture"; + addAttr -is true -ci true -sn "opaqueDepthTextureG" -ln "opaqueDepthTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "opaqueDepthTexture"; + addAttr -is true -ci true -sn "opaqueDepthTextureB" -ln "opaqueDepthTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "opaqueDepthTexture"; + addAttr -is true -ci true -h true -sn "UseDiffuseTexture_Name" -ln "UseDiffuseTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseDiffuseTexture_Type" -ln "UseDiffuseTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseDiffuseTexture" -ln "UseDiffuseTexture" + -nn "Use Diffuse Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "UseDiffuseTextureAlpha_Name" -ln "UseDiffuseTextureAlpha_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseDiffuseTextureAlpha_Type" -ln "UseDiffuseTextureAlpha_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseDiffuseTextureAlpha" -ln "UseDiffuseTextureAlpha" + -nn "Use Diffuse Map Alpha" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "DiffuseTexture_Name" -ln "DiffuseTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DiffuseTexture_Type" -ln "DiffuseTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "DiffuseTexture" -ln "DiffuseTexture" -nn "Diffuse Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "DiffuseTextureR" -ln "DiffuseTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DiffuseTexture"; + addAttr -is true -ci true -sn "DiffuseTextureG" -ln "DiffuseTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DiffuseTexture"; + addAttr -is true -ci true -sn "DiffuseTextureB" -ln "DiffuseTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DiffuseTexture"; + addAttr -is true -ci true -h true -sn "DiffuseColor_Name" -ln "DiffuseColor_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DiffuseColor_Type" -ln "DiffuseColor_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -k true -sn "DiffuseColor" -ln "DiffuseColor" -nn "Diffuse Color" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "DiffuseColorR" -ln "DiffuseColorR" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "DiffuseColor"; + addAttr -is true -ci true -sn "DiffuseColorG" -ln "DiffuseColorG" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "DiffuseColor"; + addAttr -is true -ci true -sn "DiffuseColorB" -ln "DiffuseColorB" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "DiffuseColor"; + addAttr -is true -ci true -h true -sn "Opacity_Name" -ln "Opacity_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "Opacity_Type" -ln "Opacity_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "Opacity" -ln "Opacity" -nn "Opacity" -ct "HW_shader_parameter" + -dv 1 -min 0 -max 1 -at "float"; + addAttr -is true -ci true -h true -sn "UseOpacityMaskTexture_Name" -ln "UseOpacityMaskTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseOpacityMaskTexture_Type" -ln "UseOpacityMaskTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseOpacityMaskTexture" -ln "UseOpacityMaskTexture" + -nn "Opacity Mask" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "OpacityMaskTexture_Name" -ln "OpacityMaskTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "OpacityMaskTexture_Type" -ln "OpacityMaskTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "OpacityMaskTexture" -ln "OpacityMaskTexture" + -nn "Opacity Mask" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "OpacityMaskTextureR" -ln "OpacityMaskTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "OpacityMaskTexture"; + addAttr -is true -ci true -sn "OpacityMaskTextureG" -ln "OpacityMaskTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "OpacityMaskTexture"; + addAttr -is true -ci true -sn "OpacityMaskTextureB" -ln "OpacityMaskTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "OpacityMaskTexture"; + addAttr -is true -ci true -h true -sn "OpacityMaskBias_Name" -ln "OpacityMaskBias_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "OpacityMaskBias_Type" -ln "OpacityMaskBias_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "OpacityMaskBias" -ln "OpacityMaskBias" -nn "Opacity Mask Bias" + -ct "HW_shader_parameter" -dv 0.10000000149011612 -min 0 -max 1 -at "float"; + addAttr -is true -ci true -h true -sn "UseSpecularTexture_Name" -ln "UseSpecularTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseSpecularTexture_Type" -ln "UseSpecularTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseSpecularTexture" -ln "UseSpecularTexture" + -nn "Use Specular Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "SpecularTexture_Name" -ln "SpecularTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SpecularTexture_Type" -ln "SpecularTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "SpecularTexture" -ln "SpecularTexture" -nn "Specular Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "SpecularTextureR" -ln "SpecularTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "SpecularTexture"; + addAttr -is true -ci true -sn "SpecularTextureG" -ln "SpecularTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "SpecularTexture"; + addAttr -is true -ci true -sn "SpecularTextureB" -ln "SpecularTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "SpecularTexture"; + addAttr -is true -ci true -h true -sn "SpecularColor_Name" -ln "SpecularColor_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SpecularColor_Type" -ln "SpecularColor_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -k true -sn "SpecularColor" -ln "SpecularColor" -nn "Specular Color" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "SpecularColorR" -ln "SpecularColorR" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "SpecularColor"; + addAttr -is true -ci true -sn "SpecularColorG" -ln "SpecularColorG" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "SpecularColor"; + addAttr -is true -ci true -sn "SpecularColorB" -ln "SpecularColorB" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "SpecularColor"; + addAttr -is true -ci true -h true -sn "UseNormalTexture_Name" -ln "UseNormalTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseNormalTexture_Type" -ln "UseNormalTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseNormalTexture" -ln "UseNormalTexture" + -nn "Use Normal Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "NormalTexture_Name" -ln "NormalTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "NormalTexture_Type" -ln "NormalTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "NormalTexture" -ln "NormalTexture" -nn "Normal Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "NormalTextureR" -ln "NormalTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "NormalTexture"; + addAttr -is true -ci true -sn "NormalTextureG" -ln "NormalTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "NormalTexture"; + addAttr -is true -ci true -sn "NormalTextureB" -ln "NormalTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "NormalTexture"; + addAttr -is true -ci true -h true -sn "NormalHeight_Name" -ln "NormalHeight_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "NormalHeight_Type" -ln "NormalHeight_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "NormalHeight" -ln "NormalHeight" -nn "Normal Height" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -smx 5 -at "float"; + addAttr -is true -ci true -h true -sn "SupportNonUniformScale_Name" -ln "SupportNonUniformScale_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SupportNonUniformScale_Type" -ln "SupportNonUniformScale_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "SupportNonUniformScale" -ln "SupportNonUniformScale" + -nn "Support Non-Uniform Scale" -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "NormalCoordsysX_Name" -ln "NormalCoordsysX_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "NormalCoordsysX_Type" -ln "NormalCoordsysX_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "NormalCoordsysX" -ln "NormalCoordsysX" -nn "Normal X (Red)" + -ct "HW_shader_parameter" -min 0 -max 1 -smn 0 -smx 1 -en "Positive:Negative" -at "enum"; + addAttr -is true -ci true -h true -sn "NormalCoordsysY_Name" -ln "NormalCoordsysY_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "NormalCoordsysY_Type" -ln "NormalCoordsysY_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "NormalCoordsysY" -ln "NormalCoordsysY" -nn "Normal Y (Green)" + -ct "HW_shader_parameter" -min 0 -max 1 -smn 0 -smx 1 -en "Positive:Negative" -at "enum"; + addAttr -is true -ci true -h true -sn "DisplacementModel_Name" -ln "DisplacementModel_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DisplacementModel_Type" -ln "DisplacementModel_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DisplacementModel" -ln "DisplacementModel" + -nn "Displacement Model" -ct "HW_shader_parameter" -min 0 -max 1 -smn 0 -smx 1 -en + "Grayscale:Tangent Vector" -at "enum"; + addAttr -is true -ci true -h true -sn "UseDisplacementMap_Name" -ln "UseDisplacementMap_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseDisplacementMap_Type" -ln "UseDisplacementMap_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseDisplacementMap" -ln "UseDisplacementMap" + -nn "Displacement Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "DisplacementTexture_Name" -ln "DisplacementTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DisplacementTexture_Type" -ln "DisplacementTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "DisplacementTexture" -ln "DisplacementTexture" + -nn "Displacement Map" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "DisplacementTextureR" -ln "DisplacementTextureR" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "DisplacementTexture"; + addAttr -is true -ci true -sn "DisplacementTextureG" -ln "DisplacementTextureG" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "DisplacementTexture"; + addAttr -is true -ci true -sn "DisplacementTextureB" -ln "DisplacementTextureB" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "DisplacementTexture"; + addAttr -is true -ci true -h true -sn "VectorDisplacementCoordSys_Name" -ln "VectorDisplacementCoordSys_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "VectorDisplacementCoordSys_Type" -ln "VectorDisplacementCoordSys_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "VectorDisplacementCoordSys" -ln "VectorDisplacementCoordSys" + -nn "Displacement Coordsys" -ct "HW_shader_parameter" -min 0 -max 1 -smn 0 -smx 1 + -en "Mudbox (XZY):Maya (XYZ)" -at "enum"; + addAttr -is true -ci true -h true -sn "DisplacementHeight_Name" -ln "DisplacementHeight_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DisplacementHeight_Type" -ln "DisplacementHeight_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DisplacementHeight" -ln "DisplacementHeight" + -nn "Displacement Height" -ct "HW_shader_parameter" -dv 0.5 -min -99999 -max 99999 + -smn 0 -smx 10 -at "float"; + addAttr -is true -ci true -h true -sn "DisplacementOffset_Name" -ln "DisplacementOffset_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DisplacementOffset_Type" -ln "DisplacementOffset_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DisplacementOffset" -ln "DisplacementOffset" + -nn "Displacement Offset" -ct "HW_shader_parameter" -dv 0.5 -min -99999 -max 99999 + -smn -1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "DisplacementClippingBias_Name" -ln "DisplacementClippingBias_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DisplacementClippingBias_Type" -ln "DisplacementClippingBias_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DisplacementClippingBias" -ln "DisplacementClippingBias" + -nn "Displacement Clipping Bias" -ct "HW_shader_parameter" -dv 5 -min -99999 -max + 99999 -smn 0 -smx 99 -at "float"; + addAttr -is true -ci true -h true -sn "BBoxExtraScale_Name" -ln "BBoxExtraScale_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "BBoxExtraScale_Type" -ln "BBoxExtraScale_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "BBoxExtraScale" -ln "BBoxExtraScale" -nn "Bounding Box Extra Scale" + -ct "HW_shader_parameter" -dv 1 -min 1 -max 99999 -smx 10 -at "float"; + addAttr -is true -ci true -h true -sn "TessellationRange_Name" -ln "TessellationRange_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "TessellationRange_Type" -ln "TessellationRange_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "TessellationRange" -ln "TessellationRange" + -nn "Tessellation Range" -ct "HW_shader_parameter" -min 0 -max 99999 -smx 999 -at "float"; + addAttr -is true -ci true -h true -sn "TessellationMin_Name" -ln "TessellationMin_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "TessellationMin_Type" -ln "TessellationMin_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "TessellationMin" -ln "TessellationMin" -nn "Tessellation Minimum" + -ct "HW_shader_parameter" -dv 3 -min 1 -max 99999 -smx 10 -at "float"; + addAttr -is true -ci true -h true -sn "FlatTessellation_Name" -ln "FlatTessellation_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "FlatTessellation_Type" -ln "FlatTessellation_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "FlatTessellation" -ln "FlatTessellation" + -nn "Flat Tessellation" -ct "HW_shader_parameter" -min 0 -max 1 -at "float"; + addAttr -is true -ci true -h true -sn "UseTranslucency_Name" -ln "UseTranslucency_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseTranslucency_Type" -ln "UseTranslucency_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseTranslucency" -ln "UseTranslucency" -nn "Back Scattering" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "UseThicknessTexture_Name" -ln "UseThicknessTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseThicknessTexture_Type" -ln "UseThicknessTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseThicknessTexture" -ln "UseThicknessTexture" + -nn "Use Thickness Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "UseDiffuseIBLMap_Name" -ln "UseDiffuseIBLMap_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseDiffuseIBLMap_Type" -ln "UseDiffuseIBLMap_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseDiffuseIBLMap" -ln "UseDiffuseIBLMap" + -nn "Use Diffuse Cubemap" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "DiffuseIBLIntensity_Name" -ln "DiffuseIBLIntensity_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DiffuseIBLIntensity_Type" -ln "DiffuseIBLIntensity_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DiffuseIBLIntensity" -ln "DiffuseIBLIntensity" + -nn "Diffuse IBL Intensity" -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -smx + 2 -at "float"; + addAttr -is true -ci true -h true -sn "DiffuseTexcoord_Name" -ln "DiffuseTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DiffuseTexcoord_Type" -ln "DiffuseTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DiffuseTexcoord" -ln "DiffuseTexcoord" -nn "Diffuse Map UV" + -ct "HW_shader_parameter" -min 0 -max 2 -smn 0 -smx 1 -en "TexCoord0:TexCoord1:TexCoord2" + -at "enum"; + addAttr -is true -ci true -h true -sn "OpacityMaskTexcoord_Name" -ln "OpacityMaskTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "OpacityMaskTexcoord_Type" -ln "OpacityMaskTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "OpacityMaskTexcoord" -ln "OpacityMaskTexcoord" + -nn "Opacity Mask UV" -ct "HW_shader_parameter" -min 0 -max 2 -smn 0 -smx 1 -en "TexCoord0:TexCoord1:TexCoord2" + -at "enum"; + addAttr -is true -ci true -h true -sn "SpecularTexcoord_Name" -ln "SpecularTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SpecularTexcoord_Type" -ln "SpecularTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "SpecularTexcoord" -ln "SpecularTexcoord" + -nn "Specular Map UV" -ct "HW_shader_parameter" -min 0 -max 2 -smn 0 -smx 1 -en "TexCoord0:TexCoord1:TexCoord2" + -at "enum"; + addAttr -is true -ci true -h true -sn "NormalTexcoord_Name" -ln "NormalTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "NormalTexcoord_Type" -ln "NormalTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "NormalTexcoord" -ln "NormalTexcoord" -nn "Normal Map UV" + -ct "HW_shader_parameter" -min 0 -max 2 -smn 0 -smx 1 -en "TexCoord0:TexCoord1:TexCoord2" + -at "enum"; + addAttr -is true -ci true -h true -sn "DisplacementTexcoord_Name" -ln "DisplacementTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DisplacementTexcoord_Type" -ln "DisplacementTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DisplacementTexcoord" -ln "DisplacementTexcoord" + -nn "Displacement Map UV" -ct "HW_shader_parameter" -min 0 -max 2 -smn 0 -smx 1 -en + "TexCoord0:TexCoord1:TexCoord2" -at "enum"; + addAttr -is true -ci true -h true -sn "ThicknessTexcoord_Name" -ln "ThicknessTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "ThicknessTexcoord_Type" -ln "ThicknessTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "ThicknessTexcoord" -ln "ThicknessTexcoord" + -nn "Translucency Mask UV" -ct "HW_shader_parameter" -min 0 -max 2 -smn 0 -smx 1 + -en "TexCoord0:TexCoord1:TexCoord2" -at "enum"; + addAttr -is true -ci true -h true -sn "light0ShadowMap_Name" -ln "light0ShadowMap_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0ShadowMap_Type" -ln "light0ShadowMap_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -h true -sn "light0ShadowMap" -ln "light0ShadowMap" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "light0ShadowMapR" -ln "light0ShadowMapR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light0ShadowMap"; + addAttr -is true -ci true -sn "light0ShadowMapG" -ln "light0ShadowMapG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light0ShadowMap"; + addAttr -is true -ci true -sn "light0ShadowMapB" -ln "light0ShadowMapB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light0ShadowMap"; + addAttr -is true -ci true -h true -sn "light1ShadowMap_Name" -ln "light1ShadowMap_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1ShadowMap_Type" -ln "light1ShadowMap_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -h true -sn "light1ShadowMap" -ln "light1ShadowMap" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "light1ShadowMapR" -ln "light1ShadowMapR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light1ShadowMap"; + addAttr -is true -ci true -sn "light1ShadowMapG" -ln "light1ShadowMapG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light1ShadowMap"; + addAttr -is true -ci true -sn "light1ShadowMapB" -ln "light1ShadowMapB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light1ShadowMap"; + addAttr -is true -ci true -h true -sn "light2ShadowMap_Name" -ln "light2ShadowMap_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2ShadowMap_Type" -ln "light2ShadowMap_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -h true -sn "light2ShadowMap" -ln "light2ShadowMap" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "light2ShadowMapR" -ln "light2ShadowMapR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light2ShadowMap"; + addAttr -is true -ci true -sn "light2ShadowMapG" -ln "light2ShadowMapG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light2ShadowMap"; + addAttr -is true -ci true -sn "light2ShadowMapB" -ln "light2ShadowMapB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light2ShadowMap"; + addAttr -is true -ci true -h true -sn "screenSize_Name" -ln "screenSize_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "screenSize_Type" -ln "screenSize_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "screenSize" -ln "screenSize" -ct "HW_shader_parameter" + -at "float2" -nc 2; + addAttr -is true -ci true -sn "screenSizeX" -ln "screenSizeX" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "screenSize"; + addAttr -is true -ci true -sn "screenSizeY" -ln "screenSizeY" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "screenSize"; + addAttr -is true -ci true -h true -sn "SkyRotation_Name" -ln "SkyRotation_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SkyRotation_Type" -ln "SkyRotation_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "SkyRotation" -ln "SkyRotation" -nn "Sky Rotation" + -ct "HW_shader_parameter" -min 0 -max 99999 -smn 0 -smx 360 -at "float"; + addAttr -is true -ci true -h true -sn "DiffuseCubeIBL_Name" -ln "DiffuseCubeIBL_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DiffuseCubeIBL_Type" -ln "DiffuseCubeIBL_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "DiffuseCubeIBL" -ln "DiffuseCubeIBL" -nn "Diffuse Cubemap" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "DiffuseCubeIBLR" -ln "DiffuseCubeIBLR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DiffuseCubeIBL"; + addAttr -is true -ci true -sn "DiffuseCubeIBLG" -ln "DiffuseCubeIBLG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DiffuseCubeIBL"; + addAttr -is true -ci true -sn "DiffuseCubeIBLB" -ln "DiffuseCubeIBLB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DiffuseCubeIBL"; + addAttr -is true -ci true -h true -sn "UseSpecCubeIBL_Name" -ln "UseSpecCubeIBL_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseSpecCubeIBL_Type" -ln "UseSpecCubeIBL_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseSpecCubeIBL" -ln "UseSpecCubeIBL" -nn "Use Specular Cubemap" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "SpecularIBLIntensity_Name" -ln "SpecularIBLIntensity_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SpecularIBLIntensity_Type" -ln "SpecularIBLIntensity_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "SpecularIBLIntensity" -ln "SpecularIBLIntensity" + -nn "Specular IBL Intensity" -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -smx + 2 -at "float"; + addAttr -is true -ci true -h true -sn "SpecularCubeIBL_Name" -ln "SpecularCubeIBL_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SpecularCubeIBL_Type" -ln "SpecularCubeIBL_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "SpecularCubeIBL" -ln "SpecularCubeIBL" -nn "Specular Cubemap" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "SpecularCubeIBLR" -ln "SpecularCubeIBLR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "SpecularCubeIBL"; + addAttr -is true -ci true -sn "SpecularCubeIBLG" -ln "SpecularCubeIBLG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "SpecularCubeIBL"; + addAttr -is true -ci true -sn "SpecularCubeIBLB" -ln "SpecularCubeIBLB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "SpecularCubeIBL"; + addAttr -is true -ci true -h true -sn "LutTexture_Name" -ln "LutTexture_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "LutTexture_Type" -ln "LutTexture_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -uac -sn "LutTexture" -ln "LutTexture" -nn "SSS LUT Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "LutTextureR" -ln "LutTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "LutTexture"; + addAttr -is true -ci true -sn "LutTextureG" -ln "LutTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "LutTexture"; + addAttr -is true -ci true -sn "LutTextureB" -ln "LutTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "LutTexture"; + addAttr -is true -ci true -h true -sn "DitherTexture_Name" -ln "DitherTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DitherTexture_Type" -ln "DitherTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "DitherTexture" -ln "DitherTexture" -nn "SSS Dither Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "DitherTextureR" -ln "DitherTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DitherTexture"; + addAttr -is true -ci true -sn "DitherTextureG" -ln "DitherTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DitherTexture"; + addAttr -is true -ci true -sn "DitherTextureB" -ln "DitherTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DitherTexture"; + addAttr -is true -ci true -h true -sn "skinCoeffX_Name" -ln "skinCoeffX_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "skinCoeffX_Type" -ln "skinCoeffX_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "skinCoeffX" -ln "skinCoeffX" -nn "SSS Coeffient R" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "skinCoeffY_Name" -ln "skinCoeffY_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "skinCoeffY_Type" -ln "skinCoeffY_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "skinCoeffY" -ln "skinCoeffY" -nn "SSS Coeffient G" + -ct "HW_shader_parameter" -dv 0.5 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "skinCoeffZ_Name" -ln "skinCoeffZ_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "skinCoeffZ_Type" -ln "skinCoeffZ_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "skinCoeffZ" -ln "skinCoeffZ" -nn "SSS Coeffient B" + -ct "HW_shader_parameter" -dv 0.25 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "NormalBlurring_Name" -ln "NormalBlurring_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "NormalBlurring_Type" -ln "NormalBlurring_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "NormalBlurring" -ln "NormalBlurring" -nn "SSS Softness" + -ct "HW_shader_parameter" -dv 0.25 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "UseScatteringRadiusTexture_Name" -ln "UseScatteringRadiusTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseScatteringRadiusTexture_Type" -ln "UseScatteringRadiusTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseScatteringRadiusTexture" -ln "UseScatteringRadiusTexture" + -nn "Use SSS Radius Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "ScatteringRadiusTexture_Name" -ln "ScatteringRadiusTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "ScatteringRadiusTexture_Type" -ln "ScatteringRadiusTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "ScatteringRadiusTexture" -ln "ScatteringRadiusTexture" + -nn "SSS Radius Map" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "ScatteringRadiusTextureR" -ln "ScatteringRadiusTextureR" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "ScatteringRadiusTexture"; + addAttr -is true -ci true -sn "ScatteringRadiusTextureG" -ln "ScatteringRadiusTextureG" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "ScatteringRadiusTexture"; + addAttr -is true -ci true -sn "ScatteringRadiusTextureB" -ln "ScatteringRadiusTextureB" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "ScatteringRadiusTexture"; + addAttr -is true -ci true -h true -sn "skinScattering_Name" -ln "skinScattering_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "skinScattering_Type" -ln "skinScattering_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "skinScattering" -ln "skinScattering" -nn "SSS Radius" + -ct "HW_shader_parameter" -dv 0.25 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "shadowDither_Name" -ln "shadowDither_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowDither_Type" -ln "shadowDither_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "shadowDither" -ln "shadowDither" -nn "SSS Shadow Dither" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "shadowBlur_Name" -ln "shadowBlur_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "shadowBlur_Type" -ln "shadowBlur_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "shadowBlur" -ln "shadowBlur" -nn "SSS Shadow Blur" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "shadowScattering_Name" -ln "shadowScattering_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowScattering_Type" -ln "shadowScattering_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "shadowScattering" -ln "shadowScattering" + -nn "SSS Shadow Scattering" -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -smx 1 + -at "float"; + addAttr -is true -ci true -h true -sn "shadowSaturation_Name" -ln "shadowSaturation_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowSaturation_Type" -ln "shadowSaturation_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "shadowSaturation" -ln "shadowSaturation" + -nn "SSS Shadow Saturation" -ct "HW_shader_parameter" -dv 1 -min 0 -max 4 -smx 4 + -at "float"; + addAttr -is true -ci true -h true -sn "BackScatteringThicknessTexture_Name" -ln "BackScatteringThicknessTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "BackScatteringThicknessTexture_Type" -ln "BackScatteringThicknessTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "BackScatteringThicknessTexture" -ln "BackScatteringThicknessTexture" + -nn "Thickness Map" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "BackScatteringThicknessTextureR" -ln "BackScatteringThicknessTextureR" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "BackScatteringThicknessTexture"; + addAttr -is true -ci true -sn "BackScatteringThicknessTextureG" -ln "BackScatteringThicknessTextureG" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "BackScatteringThicknessTexture"; + addAttr -is true -ci true -sn "BackScatteringThicknessTextureB" -ln "BackScatteringThicknessTextureB" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "BackScatteringThicknessTexture"; + addAttr -is true -ci true -h true -sn "skinScatteringRoughness_Name" -ln "skinScatteringRoughness_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "skinScatteringRoughness_Type" -ln "skinScatteringRoughness_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "skinScatteringRoughness" -ln "skinScatteringRoughness" + -nn "Back Scattering Width" -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -smx 1 + -at "float"; + addAttr -is true -ci true -h true -sn "skinScatteringOuterColor_Name" -ln "skinScatteringOuterColor_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "skinScatteringOuterColor_Type" -ln "skinScatteringOuterColor_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -k true -sn "skinScatteringOuterColor" -ln "skinScatteringOuterColor" + -nn "Back Scattering Color" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "skinScatteringOuterColorR" -ln "skinScatteringOuterColorR" + -ct "HW_shader_parameter" -dv 0.25 -smn 0 -smx 1 -at "float" -p "skinScatteringOuterColor"; + addAttr -is true -ci true -sn "skinScatteringOuterColorG" -ln "skinScatteringOuterColorG" + -ct "HW_shader_parameter" -dv 0.05000000074505806 -smn 0 -smx 1 -at "float" -p "skinScatteringOuterColor"; + addAttr -is true -ci true -sn "skinScatteringOuterColorB" -ln "skinScatteringOuterColorB" + -ct "HW_shader_parameter" -dv 0.019999999552965164 -smn 0 -smx 1 -at "float" -p "skinScatteringOuterColor"; + addAttr -is true -ci true -h true -sn "skinScatteringAmount_Name" -ln "skinScatteringAmount_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "skinScatteringAmount_Type" -ln "skinScatteringAmount_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "skinScatteringAmount" -ln "skinScatteringAmount" + -nn "Back Scattering Amount" -ct "HW_shader_parameter" -dv 1 -min 0 -max 6 -smx 6 + -at "float"; + addAttr -is true -ci true -h true -sn "skinAmbientScatteringAmount_Name" -ln "skinAmbientScatteringAmount_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "skinAmbientScatteringAmount_Type" -ln "skinAmbientScatteringAmount_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "skinAmbientScatteringAmount" -ln "skinAmbientScatteringAmount" + -nn "Back Scattering Ambient Amount" -ct "HW_shader_parameter" -dv 1 -min 0 -max + 6 -smx 6 -at "float"; + addAttr -is true -ci true -h true -sn "UseSpecularTextureAlpha_Name" -ln "UseSpecularTextureAlpha_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseSpecularTextureAlpha_Type" -ln "UseSpecularTextureAlpha_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseSpecularTextureAlpha" -ln "UseSpecularTextureAlpha" + -nn "Use Roughness Map Alpha" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "LobeMix_Name" -ln "LobeMix_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "LobeMix_Type" -ln "LobeMix_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "LobeMix" -ln "LobeMix" -nn "Lobe Mixing" + -ct "HW_shader_parameter" -dv 0.75 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "Roughness_Name" -ln "Roughness_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "Roughness_Type" -ln "Roughness_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "Roughness" -ln "Roughness" -nn "Roughness multiplier" + -ct "HW_shader_parameter" -dv 0.20000000298023224 -min 0.0099999997764825821 -max + 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "OcclusionTexture_Name" -ln "OcclusionTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "OcclusionTexture_Type" -ln "OcclusionTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "OcclusionTexture" -ln "OcclusionTexture" -nn "Ambient Occlusion Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "OcclusionTextureR" -ln "OcclusionTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "OcclusionTexture"; + addAttr -is true -ci true -sn "OcclusionTextureG" -ln "OcclusionTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "OcclusionTexture"; + addAttr -is true -ci true -sn "OcclusionTextureB" -ln "OcclusionTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "OcclusionTexture"; + addAttr -is true -ci true -h true -sn "OcclusionAmount_Name" -ln "OcclusionAmount_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "OcclusionAmount_Type" -ln "OcclusionAmount_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "OcclusionAmount" -ln "OcclusionAmount" -nn "Occlusion Amount" + -ct "HW_shader_parameter" -dv 1 -min 0.0099999997764825821 -max 2 -smx 2 -at "float"; + addAttr -is true -ci true -h true -sn "UseCavityTexture_Name" -ln "UseCavityTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseCavityTexture_Type" -ln "UseCavityTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseCavityTexture" -ln "UseCavityTexture" + -nn "Use Cavity Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "CavityTexture_Name" -ln "CavityTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "CavityTexture_Type" -ln "CavityTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "CavityTexture" -ln "CavityTexture" -nn "Cavity Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "CavityTextureR" -ln "CavityTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "CavityTexture"; + addAttr -is true -ci true -sn "CavityTextureG" -ln "CavityTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "CavityTexture"; + addAttr -is true -ci true -sn "CavityTextureB" -ln "CavityTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "CavityTexture"; + addAttr -is true -ci true -h true -sn "CavityAmount_Name" -ln "CavityAmount_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "CavityAmount_Type" -ln "CavityAmount_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "CavityAmount" -ln "CavityAmount" -nn "Cavity Amount" + -ct "HW_shader_parameter" -dv 1 -min 0.0099999997764825821 -max 2 -smx 2 -at "float"; + addAttr -is true -ci true -h true -sn "UseMicroCavityTexture_Name" -ln "UseMicroCavityTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseMicroCavityTexture_Type" -ln "UseMicroCavityTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseMicroCavityTexture" -ln "UseMicroCavityTexture" + -nn "Use Micro Cavity Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "MicroCavityTexture_Name" -ln "MicroCavityTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "MicroCavityTexture_Type" -ln "MicroCavityTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "MicroCavityTexture" -ln "MicroCavityTexture" + -nn "Micro Cavity Map" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "MicroCavityTextureR" -ln "MicroCavityTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "MicroCavityTexture"; + addAttr -is true -ci true -sn "MicroCavityTextureG" -ln "MicroCavityTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "MicroCavityTexture"; + addAttr -is true -ci true -sn "MicroCavityTextureB" -ln "MicroCavityTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "MicroCavityTexture"; + addAttr -is true -ci true -h true -sn "MicroCavityAmount_Name" -ln "MicroCavityAmount_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "MicroCavityAmount_Type" -ln "MicroCavityAmount_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "MicroCavityAmount" -ln "MicroCavityAmount" + -nn "Micro Cavity Amount" -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -smx + 2 -at "float"; + addAttr -is true -ci true -h true -sn "UseMicroNormalTexture_Name" -ln "UseMicroNormalTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseMicroNormalTexture_Type" -ln "UseMicroNormalTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseMicroNormalTexture" -ln "UseMicroNormalTexture" + -nn "Use Micro Normal Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "MicroNormalTexture_Name" -ln "MicroNormalTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "MicroNormalTexture_Type" -ln "MicroNormalTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "MicroNormalTexture" -ln "MicroNormalTexture" + -nn "Micro Normal Map" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "MicroNormalTextureR" -ln "MicroNormalTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "MicroNormalTexture"; + addAttr -is true -ci true -sn "MicroNormalTextureG" -ln "MicroNormalTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "MicroNormalTexture"; + addAttr -is true -ci true -sn "MicroNormalTextureB" -ln "MicroNormalTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "MicroNormalTexture"; + addAttr -is true -ci true -h true -sn "MicroNormalHeight_Name" -ln "MicroNormalHeight_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "MicroNormalHeight_Type" -ln "MicroNormalHeight_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "MicroNormalHeight" -ln "MicroNormalHeight" + -nn "Micro Normal Height" -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -smx + 5 -at "float"; + addAttr -is true -ci true -h true -sn "MicroScale_Name" -ln "MicroScale_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "MicroScale_Type" -ln "MicroScale_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "MicroScale" -ln "MicroScale" -nn "Micro Scale" + -ct "HW_shader_parameter" -dv 32 -min 16 -max 99999 -smx 256 -at "float"; + addAttr -is true -ci true -h true -sn "UseBlendTexture_Name" -ln "UseBlendTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseBlendTexture_Type" -ln "UseBlendTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseBlendTexture" -ln "UseBlendTexture" -nn "Enable Wrinkle Mixing" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "OcclusionTexcoord_Name" -ln "OcclusionTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "OcclusionTexcoord_Type" -ln "OcclusionTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "OcclusionTexcoord" -ln "OcclusionTexcoord" + -nn "Ambient Occlusion Map UV" -ct "HW_shader_parameter" -dv 1 -min 0 -max 2 -smn + 0 -smx 1 -en "TexCoord0:TexCoord1:TexCoord2" -at "enum"; + addAttr -ci true -sn "Position" -ln "Position" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "Position_Name" -ln "Position_Name" -ct "HW_shader_parameter" + -dt "string" -p "Position"; + addAttr -is true -ci true -h true -sn "Position_Source" -ln "Position_Source" -ct "HW_shader_parameter" + -dt "string" -p "Position"; + addAttr -is true -ci true -sn "Position_DefaultTexture" -ln "Position_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "Position"; + addAttr -ci true -sn "TexCoord0" -ln "TexCoord0" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "TexCoord0_Name" -ln "TexCoord0_Name" -ct "HW_shader_parameter" + -dt "string" -p "TexCoord0"; + addAttr -is true -ci true -h true -sn "TexCoord0_Source" -ln "TexCoord0_Source" + -ct "HW_shader_parameter" -dt "string" -p "TexCoord0"; + addAttr -is true -ci true -sn "TexCoord0_DefaultTexture" -ln "TexCoord0_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "TexCoord0"; + addAttr -ci true -sn "TexCoord1" -ln "TexCoord1" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "TexCoord1_Name" -ln "TexCoord1_Name" -ct "HW_shader_parameter" + -dt "string" -p "TexCoord1"; + addAttr -is true -ci true -h true -sn "TexCoord1_Source" -ln "TexCoord1_Source" + -ct "HW_shader_parameter" -dt "string" -p "TexCoord1"; + addAttr -is true -ci true -sn "TexCoord1_DefaultTexture" -ln "TexCoord1_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "TexCoord1"; + addAttr -ci true -sn "TexCoord2" -ln "TexCoord2" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "TexCoord2_Name" -ln "TexCoord2_Name" -ct "HW_shader_parameter" + -dt "string" -p "TexCoord2"; + addAttr -is true -ci true -h true -sn "TexCoord2_Source" -ln "TexCoord2_Source" + -ct "HW_shader_parameter" -dt "string" -p "TexCoord2"; + addAttr -is true -ci true -sn "TexCoord2_DefaultTexture" -ln "TexCoord2_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "TexCoord2"; + addAttr -ci true -sn "Normal" -ln "Normal" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "Normal_Name" -ln "Normal_Name" -ct "HW_shader_parameter" + -dt "string" -p "Normal"; + addAttr -is true -ci true -h true -sn "Normal_Source" -ln "Normal_Source" -ct "HW_shader_parameter" + -dt "string" -p "Normal"; + addAttr -is true -ci true -sn "Normal_DefaultTexture" -ln "Normal_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "Normal"; + addAttr -ci true -sn "Binormal0" -ln "Binormal0" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "Binormal0_Name" -ln "Binormal0_Name" -ct "HW_shader_parameter" + -dt "string" -p "Binormal0"; + addAttr -is true -ci true -h true -sn "Binormal0_Source" -ln "Binormal0_Source" + -ct "HW_shader_parameter" -dt "string" -p "Binormal0"; + addAttr -is true -ci true -sn "Binormal0_DefaultTexture" -ln "Binormal0_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "Binormal0"; + addAttr -ci true -sn "Tangent0" -ln "Tangent0" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "Tangent0_Name" -ln "Tangent0_Name" -ct "HW_shader_parameter" + -dt "string" -p "Tangent0"; + addAttr -is true -ci true -h true -sn "Tangent0_Source" -ln "Tangent0_Source" -ct "HW_shader_parameter" + -dt "string" -p "Tangent0"; + addAttr -is true -ci true -sn "Tangent0_DefaultTexture" -ln "Tangent0_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "Tangent0"; + addAttr -is true -ci true -h true -sn "animNormalMap_00_Name" -ln "animNormalMap_00_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "animNormalMap_00_Type" -ln "animNormalMap_00_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "animNormalMap_00" -ln "animNormalMap_00" -nn "Wrinkle Map 00" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "animNormalMap_00R" -ln "animNormalMap_00R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "animNormalMap_00"; + addAttr -is true -ci true -sn "animNormalMap_00G" -ln "animNormalMap_00G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "animNormalMap_00"; + addAttr -is true -ci true -sn "animNormalMap_00B" -ln "animNormalMap_00B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "animNormalMap_00"; + addAttr -is true -ci true -h true -sn "maskChannel_00_Name" -ln "maskChannel_00_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_00_Type" -ln "maskChannel_00_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_00" -ln "maskChannel_00" -nn "Channel 00 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_00R" -ln "maskChannel_00R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_00"; + addAttr -is true -ci true -sn "maskChannel_00G" -ln "maskChannel_00G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_00"; + addAttr -is true -ci true -sn "maskChannel_00B" -ln "maskChannel_00B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_00"; + addAttr -is true -ci true -h true -sn "maskChannel_01_Name" -ln "maskChannel_01_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_01_Type" -ln "maskChannel_01_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_01" -ln "maskChannel_01" -nn "Channel 01 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_01R" -ln "maskChannel_01R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_01"; + addAttr -is true -ci true -sn "maskChannel_01G" -ln "maskChannel_01G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_01"; + addAttr -is true -ci true -sn "maskChannel_01B" -ln "maskChannel_01B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_01"; + addAttr -is true -ci true -h true -sn "animNormalMap_01_Name" -ln "animNormalMap_01_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "animNormalMap_01_Type" -ln "animNormalMap_01_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "animNormalMap_01" -ln "animNormalMap_01" -nn "Wrinkle Map 01" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "animNormalMap_01R" -ln "animNormalMap_01R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "animNormalMap_01"; + addAttr -is true -ci true -sn "animNormalMap_01G" -ln "animNormalMap_01G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "animNormalMap_01"; + addAttr -is true -ci true -sn "animNormalMap_01B" -ln "animNormalMap_01B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "animNormalMap_01"; + addAttr -is true -ci true -h true -sn "maskChannel_02_Name" -ln "maskChannel_02_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_02_Type" -ln "maskChannel_02_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_02" -ln "maskChannel_02" -nn "Channel 02 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_02R" -ln "maskChannel_02R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_02"; + addAttr -is true -ci true -sn "maskChannel_02G" -ln "maskChannel_02G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_02"; + addAttr -is true -ci true -sn "maskChannel_02B" -ln "maskChannel_02B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_02"; + addAttr -is true -ci true -h true -sn "animNormalMap_02_Name" -ln "animNormalMap_02_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "animNormalMap_02_Type" -ln "animNormalMap_02_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "animNormalMap_02" -ln "animNormalMap_02" -nn "Wrinkle Map 02" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "animNormalMap_02R" -ln "animNormalMap_02R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "animNormalMap_02"; + addAttr -is true -ci true -sn "animNormalMap_02G" -ln "animNormalMap_02G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "animNormalMap_02"; + addAttr -is true -ci true -sn "animNormalMap_02B" -ln "animNormalMap_02B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "animNormalMap_02"; + addAttr -is true -ci true -h true -sn "maskChannel_03_Name" -ln "maskChannel_03_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_03_Type" -ln "maskChannel_03_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_03" -ln "maskChannel_03" -nn "Channel 03 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_03R" -ln "maskChannel_03R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_03"; + addAttr -is true -ci true -sn "maskChannel_03G" -ln "maskChannel_03G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_03"; + addAttr -is true -ci true -sn "maskChannel_03B" -ln "maskChannel_03B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_03"; + addAttr -is true -ci true -h true -sn "animColorMap_00_Name" -ln "animColorMap_00_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "animColorMap_00_Type" -ln "animColorMap_00_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "animColorMap_00" -ln "animColorMap_00" -nn "Blood Flow 00" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "animColorMap_00R" -ln "animColorMap_00R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "animColorMap_00"; + addAttr -is true -ci true -sn "animColorMap_00G" -ln "animColorMap_00G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "animColorMap_00"; + addAttr -is true -ci true -sn "animColorMap_00B" -ln "animColorMap_00B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "animColorMap_00"; + addAttr -is true -ci true -h true -sn "maskChannel_04_Name" -ln "maskChannel_04_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_04_Type" -ln "maskChannel_04_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_04" -ln "maskChannel_04" -nn "Channel 04 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_04R" -ln "maskChannel_04R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_04"; + addAttr -is true -ci true -sn "maskChannel_04G" -ln "maskChannel_04G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_04"; + addAttr -is true -ci true -sn "maskChannel_04B" -ln "maskChannel_04B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_04"; + addAttr -is true -ci true -h true -sn "animColorMap_01_Name" -ln "animColorMap_01_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "animColorMap_01_Type" -ln "animColorMap_01_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "animColorMap_01" -ln "animColorMap_01" -nn "Blood Flow 01" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "animColorMap_01R" -ln "animColorMap_01R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "animColorMap_01"; + addAttr -is true -ci true -sn "animColorMap_01G" -ln "animColorMap_01G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "animColorMap_01"; + addAttr -is true -ci true -sn "animColorMap_01B" -ln "animColorMap_01B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "animColorMap_01"; + addAttr -is true -ci true -h true -sn "animColorMap_02_Name" -ln "animColorMap_02_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "animColorMap_02_Type" -ln "animColorMap_02_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "animColorMap_02" -ln "animColorMap_02" -nn "Blood Flow 02" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "animColorMap_02R" -ln "animColorMap_02R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "animColorMap_02"; + addAttr -is true -ci true -sn "animColorMap_02G" -ln "animColorMap_02G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "animColorMap_02"; + addAttr -is true -ci true -sn "animColorMap_02B" -ln "animColorMap_02B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "animColorMap_02"; + addAttr -is true -ci true -h true -sn "maskChannel_05_Name" -ln "maskChannel_05_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_05_Type" -ln "maskChannel_05_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_05" -ln "maskChannel_05" -nn "Channel 05 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_05R" -ln "maskChannel_05R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_05"; + addAttr -is true -ci true -sn "maskChannel_05G" -ln "maskChannel_05G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_05"; + addAttr -is true -ci true -sn "maskChannel_05B" -ln "maskChannel_05B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_05"; + addAttr -is true -ci true -h true -sn "maskWeight_00_Name" -ln "maskWeight_00_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_00_Type" -ln "maskWeight_00_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_00" -ln "maskWeight_00" -nn "Channel 00 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskChannel_06_Name" -ln "maskChannel_06_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_06_Type" -ln "maskChannel_06_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_06" -ln "maskChannel_06" -nn "Channel 06 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_06R" -ln "maskChannel_06R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_06"; + addAttr -is true -ci true -sn "maskChannel_06G" -ln "maskChannel_06G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_06"; + addAttr -is true -ci true -sn "maskChannel_06B" -ln "maskChannel_06B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_06"; + addAttr -is true -ci true -h true -sn "maskWeight_01_Name" -ln "maskWeight_01_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_01_Type" -ln "maskWeight_01_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_01" -ln "maskWeight_01" -nn "Channel 01 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskChannel_07_Name" -ln "maskChannel_07_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_07_Type" -ln "maskChannel_07_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_07" -ln "maskChannel_07" -nn "Channel 07 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_07R" -ln "maskChannel_07R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_07"; + addAttr -is true -ci true -sn "maskChannel_07G" -ln "maskChannel_07G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_07"; + addAttr -is true -ci true -sn "maskChannel_07B" -ln "maskChannel_07B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_07"; + addAttr -is true -ci true -h true -sn "maskWeight_02_Name" -ln "maskWeight_02_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_02_Type" -ln "maskWeight_02_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_02" -ln "maskWeight_02" -nn "Channel 02 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskChannel_08_Name" -ln "maskChannel_08_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_08_Type" -ln "maskChannel_08_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_08" -ln "maskChannel_08" -nn "Channel 08 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_08R" -ln "maskChannel_08R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_08"; + addAttr -is true -ci true -sn "maskChannel_08G" -ln "maskChannel_08G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_08"; + addAttr -is true -ci true -sn "maskChannel_08B" -ln "maskChannel_08B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_08"; + addAttr -is true -ci true -h true -sn "maskChannel_09_Name" -ln "maskChannel_09_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_09_Type" -ln "maskChannel_09_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_09" -ln "maskChannel_09" -nn "Channel 09 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_09R" -ln "maskChannel_09R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_09"; + addAttr -is true -ci true -sn "maskChannel_09G" -ln "maskChannel_09G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_09"; + addAttr -is true -ci true -sn "maskChannel_09B" -ln "maskChannel_09B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_09"; + addAttr -is true -ci true -h true -sn "maskWeight_03_Name" -ln "maskWeight_03_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_03_Type" -ln "maskWeight_03_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_03" -ln "maskWeight_03" -nn "Channel 03 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskChannel_10_Name" -ln "maskChannel_10_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_10_Type" -ln "maskChannel_10_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_10" -ln "maskChannel_10" -nn "Channel 10 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_10R" -ln "maskChannel_10R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_10"; + addAttr -is true -ci true -sn "maskChannel_10G" -ln "maskChannel_10G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_10"; + addAttr -is true -ci true -sn "maskChannel_10B" -ln "maskChannel_10B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_10"; + addAttr -is true -ci true -h true -sn "maskWeight_04_Name" -ln "maskWeight_04_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_04_Type" -ln "maskWeight_04_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_04" -ln "maskWeight_04" -nn "Channel 04 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_05_Name" -ln "maskWeight_05_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_05_Type" -ln "maskWeight_05_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_05" -ln "maskWeight_05" -nn "Channel 05 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskChannel_11_Name" -ln "maskChannel_11_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_11_Type" -ln "maskChannel_11_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_11" -ln "maskChannel_11" -nn "Channel 11 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_11R" -ln "maskChannel_11R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_11"; + addAttr -is true -ci true -sn "maskChannel_11G" -ln "maskChannel_11G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_11"; + addAttr -is true -ci true -sn "maskChannel_11B" -ln "maskChannel_11B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_11"; + addAttr -is true -ci true -h true -sn "maskWeight_06_Name" -ln "maskWeight_06_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_06_Type" -ln "maskWeight_06_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_06" -ln "maskWeight_06" -nn "Channel 06 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskChannel_12_Name" -ln "maskChannel_12_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_12_Type" -ln "maskChannel_12_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_12" -ln "maskChannel_12" -nn "Channel 12 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_12R" -ln "maskChannel_12R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_12"; + addAttr -is true -ci true -sn "maskChannel_12G" -ln "maskChannel_12G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_12"; + addAttr -is true -ci true -sn "maskChannel_12B" -ln "maskChannel_12B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_12"; + addAttr -is true -ci true -h true -sn "maskChannel_13_Name" -ln "maskChannel_13_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_13_Type" -ln "maskChannel_13_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_13" -ln "maskChannel_13" -nn "Channel 13 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_13R" -ln "maskChannel_13R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_13"; + addAttr -is true -ci true -sn "maskChannel_13G" -ln "maskChannel_13G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_13"; + addAttr -is true -ci true -sn "maskChannel_13B" -ln "maskChannel_13B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_13"; + addAttr -is true -ci true -h true -sn "maskWeight_07_Name" -ln "maskWeight_07_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_07_Type" -ln "maskWeight_07_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_07" -ln "maskWeight_07" -nn "Channel 07 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_08_Name" -ln "maskWeight_08_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_08_Type" -ln "maskWeight_08_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_08" -ln "maskWeight_08" -nn "Channel 08 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskChannel_14_Name" -ln "maskChannel_14_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_14_Type" -ln "maskChannel_14_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_14" -ln "maskChannel_14" -nn "Channel 14 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_14R" -ln "maskChannel_14R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_14"; + addAttr -is true -ci true -sn "maskChannel_14G" -ln "maskChannel_14G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_14"; + addAttr -is true -ci true -sn "maskChannel_14B" -ln "maskChannel_14B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_14"; + addAttr -is true -ci true -h true -sn "maskChannel_15_Name" -ln "maskChannel_15_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_15_Type" -ln "maskChannel_15_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_15" -ln "maskChannel_15" -nn "Channel 15 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_15R" -ln "maskChannel_15R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_15"; + addAttr -is true -ci true -sn "maskChannel_15G" -ln "maskChannel_15G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_15"; + addAttr -is true -ci true -sn "maskChannel_15B" -ln "maskChannel_15B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_15"; + addAttr -is true -ci true -h true -sn "maskWeight_09_Name" -ln "maskWeight_09_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_09_Type" -ln "maskWeight_09_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_09" -ln "maskWeight_09" -nn "Channel 09 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskChannel_16_Name" -ln "maskChannel_16_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_16_Type" -ln "maskChannel_16_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_16" -ln "maskChannel_16" -nn "Channel 16 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_16R" -ln "maskChannel_16R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_16"; + addAttr -is true -ci true -sn "maskChannel_16G" -ln "maskChannel_16G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_16"; + addAttr -is true -ci true -sn "maskChannel_16B" -ln "maskChannel_16B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_16"; + addAttr -is true -ci true -h true -sn "maskWeight_10_Name" -ln "maskWeight_10_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_10_Type" -ln "maskWeight_10_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_10" -ln "maskWeight_10" -nn "Channel 10 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskChannel_17_Name" -ln "maskChannel_17_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_17_Type" -ln "maskChannel_17_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_17" -ln "maskChannel_17" -nn "Channel 17 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_17R" -ln "maskChannel_17R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_17"; + addAttr -is true -ci true -sn "maskChannel_17G" -ln "maskChannel_17G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_17"; + addAttr -is true -ci true -sn "maskChannel_17B" -ln "maskChannel_17B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_17"; + addAttr -is true -ci true -h true -sn "maskWeight_11_Name" -ln "maskWeight_11_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_11_Type" -ln "maskWeight_11_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_11" -ln "maskWeight_11" -nn "Channel 11 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_12_Name" -ln "maskWeight_12_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_12_Type" -ln "maskWeight_12_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_12" -ln "maskWeight_12" -nn "Channel 12 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskChannel_18_Name" -ln "maskChannel_18_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_18_Type" -ln "maskChannel_18_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_18" -ln "maskChannel_18" -nn "Channel 18 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_18R" -ln "maskChannel_18R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_18"; + addAttr -is true -ci true -sn "maskChannel_18G" -ln "maskChannel_18G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_18"; + addAttr -is true -ci true -sn "maskChannel_18B" -ln "maskChannel_18B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_18"; + addAttr -is true -ci true -h true -sn "maskWeight_13_Name" -ln "maskWeight_13_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_13_Type" -ln "maskWeight_13_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_13" -ln "maskWeight_13" -nn "Channel 13 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskChannel_19_Name" -ln "maskChannel_19_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_19_Type" -ln "maskChannel_19_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_19" -ln "maskChannel_19" -nn "Channel 19 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_19R" -ln "maskChannel_19R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_19"; + addAttr -is true -ci true -sn "maskChannel_19G" -ln "maskChannel_19G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_19"; + addAttr -is true -ci true -sn "maskChannel_19B" -ln "maskChannel_19B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_19"; + addAttr -is true -ci true -h true -sn "maskWeight_14_Name" -ln "maskWeight_14_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_14_Type" -ln "maskWeight_14_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_14" -ln "maskWeight_14" -nn "Channel 14 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskChannel_20_Name" -ln "maskChannel_20_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_20_Type" -ln "maskChannel_20_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_20" -ln "maskChannel_20" -nn "Channel 20 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_20R" -ln "maskChannel_20R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_20"; + addAttr -is true -ci true -sn "maskChannel_20G" -ln "maskChannel_20G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_20"; + addAttr -is true -ci true -sn "maskChannel_20B" -ln "maskChannel_20B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_20"; + addAttr -is true -ci true -h true -sn "maskWeight_15_Name" -ln "maskWeight_15_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_15_Type" -ln "maskWeight_15_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_15" -ln "maskWeight_15" -nn "Channel 15 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskChannel_21_Name" -ln "maskChannel_21_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_21_Type" -ln "maskChannel_21_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_21" -ln "maskChannel_21" -nn "Channel 21 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_21R" -ln "maskChannel_21R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_21"; + addAttr -is true -ci true -sn "maskChannel_21G" -ln "maskChannel_21G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_21"; + addAttr -is true -ci true -sn "maskChannel_21B" -ln "maskChannel_21B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_21"; + addAttr -is true -ci true -h true -sn "maskWeight_16_Name" -ln "maskWeight_16_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_16_Type" -ln "maskWeight_16_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_16" -ln "maskWeight_16" -nn "Channel 16 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskChannel_22_Name" -ln "maskChannel_22_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_22_Type" -ln "maskChannel_22_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_22" -ln "maskChannel_22" -nn "Channel 22 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_22R" -ln "maskChannel_22R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_22"; + addAttr -is true -ci true -sn "maskChannel_22G" -ln "maskChannel_22G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_22"; + addAttr -is true -ci true -sn "maskChannel_22B" -ln "maskChannel_22B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_22"; + addAttr -is true -ci true -h true -sn "maskWeight_17_Name" -ln "maskWeight_17_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_17_Type" -ln "maskWeight_17_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_17" -ln "maskWeight_17" -nn "Channel 17 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskChannel_23_Name" -ln "maskChannel_23_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_23_Type" -ln "maskChannel_23_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_23" -ln "maskChannel_23" -nn "Channel 23 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_23R" -ln "maskChannel_23R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_23"; + addAttr -is true -ci true -sn "maskChannel_23G" -ln "maskChannel_23G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_23"; + addAttr -is true -ci true -sn "maskChannel_23B" -ln "maskChannel_23B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_23"; + addAttr -is true -ci true -h true -sn "maskWeight_18_Name" -ln "maskWeight_18_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_18_Type" -ln "maskWeight_18_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_18" -ln "maskWeight_18" -nn "Channel 18 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskChannel_24_Name" -ln "maskChannel_24_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_24_Type" -ln "maskChannel_24_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_24" -ln "maskChannel_24" -nn "Channel 24 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_24R" -ln "maskChannel_24R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_24"; + addAttr -is true -ci true -sn "maskChannel_24G" -ln "maskChannel_24G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_24"; + addAttr -is true -ci true -sn "maskChannel_24B" -ln "maskChannel_24B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_24"; + addAttr -is true -ci true -h true -sn "maskChannel_25_Name" -ln "maskChannel_25_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_25_Type" -ln "maskChannel_25_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_25" -ln "maskChannel_25" -nn "Channel 25 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_25R" -ln "maskChannel_25R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_25"; + addAttr -is true -ci true -sn "maskChannel_25G" -ln "maskChannel_25G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_25"; + addAttr -is true -ci true -sn "maskChannel_25B" -ln "maskChannel_25B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_25"; + addAttr -is true -ci true -h true -sn "maskWeight_19_Name" -ln "maskWeight_19_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_19_Type" -ln "maskWeight_19_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_19" -ln "maskWeight_19" -nn "Channel 19 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_20_Name" -ln "maskWeight_20_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_20_Type" -ln "maskWeight_20_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_20" -ln "maskWeight_20" -nn "Channel 20 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskChannel_26_Name" -ln "maskChannel_26_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_26_Type" -ln "maskChannel_26_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_26" -ln "maskChannel_26" -nn "Channel 26 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_26R" -ln "maskChannel_26R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_26"; + addAttr -is true -ci true -sn "maskChannel_26G" -ln "maskChannel_26G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_26"; + addAttr -is true -ci true -sn "maskChannel_26B" -ln "maskChannel_26B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_26"; + addAttr -is true -ci true -h true -sn "maskWeight_21_Name" -ln "maskWeight_21_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_21_Type" -ln "maskWeight_21_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_21" -ln "maskWeight_21" -nn "Channel 21 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskChannel_27_Name" -ln "maskChannel_27_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_27_Type" -ln "maskChannel_27_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_27" -ln "maskChannel_27" -nn "Channel 27 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_27R" -ln "maskChannel_27R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_27"; + addAttr -is true -ci true -sn "maskChannel_27G" -ln "maskChannel_27G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_27"; + addAttr -is true -ci true -sn "maskChannel_27B" -ln "maskChannel_27B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_27"; + addAttr -is true -ci true -h true -sn "maskWeight_22_Name" -ln "maskWeight_22_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_22_Type" -ln "maskWeight_22_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_22" -ln "maskWeight_22" -nn "Channel 22 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskChannel_28_Name" -ln "maskChannel_28_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_28_Type" -ln "maskChannel_28_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_28" -ln "maskChannel_28" -nn "Channel 28 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_28R" -ln "maskChannel_28R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_28"; + addAttr -is true -ci true -sn "maskChannel_28G" -ln "maskChannel_28G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_28"; + addAttr -is true -ci true -sn "maskChannel_28B" -ln "maskChannel_28B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_28"; + addAttr -is true -ci true -h true -sn "maskWeight_23_Name" -ln "maskWeight_23_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_23_Type" -ln "maskWeight_23_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_23" -ln "maskWeight_23" -nn "Channel 23 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskChannel_29_Name" -ln "maskChannel_29_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_29_Type" -ln "maskChannel_29_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_29" -ln "maskChannel_29" -nn "Channel 29 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_29R" -ln "maskChannel_29R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_29"; + addAttr -is true -ci true -sn "maskChannel_29G" -ln "maskChannel_29G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_29"; + addAttr -is true -ci true -sn "maskChannel_29B" -ln "maskChannel_29B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_29"; + addAttr -is true -ci true -h true -sn "maskChannel_30_Name" -ln "maskChannel_30_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_30_Type" -ln "maskChannel_30_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_30" -ln "maskChannel_30" -nn "Channel 30 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_30R" -ln "maskChannel_30R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_30"; + addAttr -is true -ci true -sn "maskChannel_30G" -ln "maskChannel_30G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_30"; + addAttr -is true -ci true -sn "maskChannel_30B" -ln "maskChannel_30B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_30"; + addAttr -is true -ci true -h true -sn "maskWeight_24_Name" -ln "maskWeight_24_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_24_Type" -ln "maskWeight_24_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_24" -ln "maskWeight_24" -nn "Channel 24 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_25_Name" -ln "maskWeight_25_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_25_Type" -ln "maskWeight_25_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_25" -ln "maskWeight_25" -nn "Channel 25 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskChannel_31_Name" -ln "maskChannel_31_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_31_Type" -ln "maskChannel_31_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_31" -ln "maskChannel_31" -nn "Channel 31 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_31R" -ln "maskChannel_31R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_31"; + addAttr -is true -ci true -sn "maskChannel_31G" -ln "maskChannel_31G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_31"; + addAttr -is true -ci true -sn "maskChannel_31B" -ln "maskChannel_31B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_31"; + addAttr -is true -ci true -h true -sn "maskWeight_26_Name" -ln "maskWeight_26_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_26_Type" -ln "maskWeight_26_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_26" -ln "maskWeight_26" -nn "Channel 26 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskChannel_32_Name" -ln "maskChannel_32_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_32_Type" -ln "maskChannel_32_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_32" -ln "maskChannel_32" -nn "Channel 32 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_32R" -ln "maskChannel_32R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_32"; + addAttr -is true -ci true -sn "maskChannel_32G" -ln "maskChannel_32G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_32"; + addAttr -is true -ci true -sn "maskChannel_32B" -ln "maskChannel_32B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_32"; + addAttr -is true -ci true -h true -sn "maskWeight_27_Name" -ln "maskWeight_27_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_27_Type" -ln "maskWeight_27_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_27" -ln "maskWeight_27" -nn "Channel 27 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskChannel_33_Name" -ln "maskChannel_33_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_33_Type" -ln "maskChannel_33_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_33" -ln "maskChannel_33" -nn "Channel 33 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_33R" -ln "maskChannel_33R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_33"; + addAttr -is true -ci true -sn "maskChannel_33G" -ln "maskChannel_33G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_33"; + addAttr -is true -ci true -sn "maskChannel_33B" -ln "maskChannel_33B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_33"; + addAttr -is true -ci true -h true -sn "maskWeight_28_Name" -ln "maskWeight_28_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_28_Type" -ln "maskWeight_28_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_28" -ln "maskWeight_28" -nn "Channel 28 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskChannel_34_Name" -ln "maskChannel_34_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_34_Type" -ln "maskChannel_34_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_34" -ln "maskChannel_34" -nn "Channel 34 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_34R" -ln "maskChannel_34R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_34"; + addAttr -is true -ci true -sn "maskChannel_34G" -ln "maskChannel_34G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_34"; + addAttr -is true -ci true -sn "maskChannel_34B" -ln "maskChannel_34B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_34"; + addAttr -is true -ci true -h true -sn "maskWeight_29_Name" -ln "maskWeight_29_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_29_Type" -ln "maskWeight_29_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_29" -ln "maskWeight_29" -nn "Channel 29 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskChannel_35_Name" -ln "maskChannel_35_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_35_Type" -ln "maskChannel_35_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_35" -ln "maskChannel_35" -nn "Channel 35 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_35R" -ln "maskChannel_35R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_35"; + addAttr -is true -ci true -sn "maskChannel_35G" -ln "maskChannel_35G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_35"; + addAttr -is true -ci true -sn "maskChannel_35B" -ln "maskChannel_35B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_35"; + addAttr -is true -ci true -h true -sn "maskWeight_30_Name" -ln "maskWeight_30_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_30_Type" -ln "maskWeight_30_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_30" -ln "maskWeight_30" -nn "Channel 30 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskChannel_36_Name" -ln "maskChannel_36_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskChannel_36_Type" -ln "maskChannel_36_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "maskChannel_36" -ln "maskChannel_36" -nn "Channel 36 Mask" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "maskChannel_36R" -ln "maskChannel_36R" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_36"; + addAttr -is true -ci true -sn "maskChannel_36G" -ln "maskChannel_36G" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_36"; + addAttr -is true -ci true -sn "maskChannel_36B" -ln "maskChannel_36B" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "maskChannel_36"; + addAttr -is true -ci true -h true -sn "maskWeight_31_Name" -ln "maskWeight_31_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_31_Type" -ln "maskWeight_31_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_31" -ln "maskWeight_31" -nn "Channel 31 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_32_Name" -ln "maskWeight_32_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_32_Type" -ln "maskWeight_32_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_32" -ln "maskWeight_32" -nn "Channel 32 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_33_Name" -ln "maskWeight_33_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_33_Type" -ln "maskWeight_33_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_33" -ln "maskWeight_33" -nn "Channel 33 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_34_Name" -ln "maskWeight_34_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_34_Type" -ln "maskWeight_34_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_34" -ln "maskWeight_34" -nn "Channel 34 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_35_Name" -ln "maskWeight_35_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_35_Type" -ln "maskWeight_35_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_35" -ln "maskWeight_35" -nn "Channel 35 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_36_Name" -ln "maskWeight_36_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_36_Type" -ln "maskWeight_36_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_36" -ln "maskWeight_36" -nn "Channel 36 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_37_Name" -ln "maskWeight_37_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_37_Type" -ln "maskWeight_37_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_37" -ln "maskWeight_37" -nn "Channel 37 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_38_Name" -ln "maskWeight_38_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_38_Type" -ln "maskWeight_38_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_38" -ln "maskWeight_38" -nn "Channel 38 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_39_Name" -ln "maskWeight_39_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_39_Type" -ln "maskWeight_39_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_39" -ln "maskWeight_39" -nn "Channel 39 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_40_Name" -ln "maskWeight_40_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_40_Type" -ln "maskWeight_40_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_40" -ln "maskWeight_40" -nn "Channel 40 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_41_Name" -ln "maskWeight_41_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_41_Type" -ln "maskWeight_41_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_41" -ln "maskWeight_41" -nn "Channel 41 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_42_Name" -ln "maskWeight_42_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_42_Type" -ln "maskWeight_42_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_42" -ln "maskWeight_42" -nn "Channel 42 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_43_Name" -ln "maskWeight_43_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_43_Type" -ln "maskWeight_43_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_43" -ln "maskWeight_43" -nn "Channel 43 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_44_Name" -ln "maskWeight_44_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_44_Type" -ln "maskWeight_44_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_44" -ln "maskWeight_44" -nn "Channel 44 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_45_Name" -ln "maskWeight_45_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_45_Type" -ln "maskWeight_45_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_45" -ln "maskWeight_45" -nn "Channel 45 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_46_Name" -ln "maskWeight_46_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_46_Type" -ln "maskWeight_46_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_46" -ln "maskWeight_46" -nn "Channel 46 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_47_Name" -ln "maskWeight_47_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_47_Type" -ln "maskWeight_47_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_47" -ln "maskWeight_47" -nn "Channel 47 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_48_Name" -ln "maskWeight_48_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_48_Type" -ln "maskWeight_48_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_48" -ln "maskWeight_48" -nn "Channel 48 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_49_Name" -ln "maskWeight_49_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_49_Type" -ln "maskWeight_49_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_49" -ln "maskWeight_49" -nn "Channel 49 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_50_Name" -ln "maskWeight_50_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_50_Type" -ln "maskWeight_50_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_50" -ln "maskWeight_50" -nn "Channel 50 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_51_Name" -ln "maskWeight_51_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_51_Type" -ln "maskWeight_51_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_51" -ln "maskWeight_51" -nn "Channel 51 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_52_Name" -ln "maskWeight_52_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_52_Type" -ln "maskWeight_52_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_52" -ln "maskWeight_52" -nn "Channel 52 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_53_Name" -ln "maskWeight_53_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_53_Type" -ln "maskWeight_53_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_53" -ln "maskWeight_53" -nn "Channel 53 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_54_Name" -ln "maskWeight_54_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_54_Type" -ln "maskWeight_54_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_54" -ln "maskWeight_54" -nn "Channel 54 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_55_Name" -ln "maskWeight_55_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_55_Type" -ln "maskWeight_55_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_55" -ln "maskWeight_55" -nn "Channel 55 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_56_Name" -ln "maskWeight_56_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_56_Type" -ln "maskWeight_56_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_56" -ln "maskWeight_56" -nn "Channel 56 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_57_Name" -ln "maskWeight_57_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_57_Type" -ln "maskWeight_57_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_57" -ln "maskWeight_57" -nn "Channel 57 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_58_Name" -ln "maskWeight_58_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_58_Type" -ln "maskWeight_58_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_58" -ln "maskWeight_58" -nn "Channel 58 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_59_Name" -ln "maskWeight_59_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_59_Type" -ln "maskWeight_59_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_59" -ln "maskWeight_59" -nn "Channel 59 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_60_Name" -ln "maskWeight_60_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_60_Type" -ln "maskWeight_60_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_60" -ln "maskWeight_60" -nn "Channel 60 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_61_Name" -ln "maskWeight_61_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_61_Type" -ln "maskWeight_61_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_61" -ln "maskWeight_61" -nn "Channel 61 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_62_Name" -ln "maskWeight_62_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_62_Type" -ln "maskWeight_62_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_62" -ln "maskWeight_62" -nn "Channel 62 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_63_Name" -ln "maskWeight_63_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_63_Type" -ln "maskWeight_63_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_63" -ln "maskWeight_63" -nn "Channel 63 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_64_Name" -ln "maskWeight_64_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_64_Type" -ln "maskWeight_64_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_64" -ln "maskWeight_64" -nn "Channel 64 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_65_Name" -ln "maskWeight_65_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_65_Type" -ln "maskWeight_65_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_65" -ln "maskWeight_65" -nn "Channel 65 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_66_Name" -ln "maskWeight_66_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_66_Type" -ln "maskWeight_66_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_66" -ln "maskWeight_66" -nn "Channel 66 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_67_Name" -ln "maskWeight_67_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_67_Type" -ln "maskWeight_67_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_67" -ln "maskWeight_67" -nn "Channel 67 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_68_Name" -ln "maskWeight_68_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_68_Type" -ln "maskWeight_68_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_68" -ln "maskWeight_68" -nn "Channel 68 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_69_Name" -ln "maskWeight_69_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_69_Type" -ln "maskWeight_69_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_69" -ln "maskWeight_69" -nn "Channel 69 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_70_Name" -ln "maskWeight_70_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_70_Type" -ln "maskWeight_70_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_70" -ln "maskWeight_70" -nn "Channel 70 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_71_Name" -ln "maskWeight_71_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_71_Type" -ln "maskWeight_71_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_71" -ln "maskWeight_71" -nn "Channel 71 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_72_Name" -ln "maskWeight_72_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_72_Type" -ln "maskWeight_72_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_72" -ln "maskWeight_72" -nn "Channel 72 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_73_Name" -ln "maskWeight_73_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_73_Type" -ln "maskWeight_73_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_73" -ln "maskWeight_73" -nn "Channel 73 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_74_Name" -ln "maskWeight_74_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_74_Type" -ln "maskWeight_74_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_74" -ln "maskWeight_74" -nn "Channel 74 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_75_Name" -ln "maskWeight_75_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_75_Type" -ln "maskWeight_75_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_75" -ln "maskWeight_75" -nn "Channel 75 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_76_Name" -ln "maskWeight_76_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_76_Type" -ln "maskWeight_76_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_76" -ln "maskWeight_76" -nn "Channel 76 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_77_Name" -ln "maskWeight_77_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_77_Type" -ln "maskWeight_77_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_77" -ln "maskWeight_77" -nn "Channel 77 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_78_Name" -ln "maskWeight_78_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_78_Type" -ln "maskWeight_78_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_78" -ln "maskWeight_78" -nn "Channel 78 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_79_Name" -ln "maskWeight_79_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_79_Type" -ln "maskWeight_79_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_79" -ln "maskWeight_79" -nn "Channel 79 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_80_Name" -ln "maskWeight_80_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_80_Type" -ln "maskWeight_80_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_80" -ln "maskWeight_80" -nn "Channel 80 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "maskWeight_81_Name" -ln "maskWeight_81_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "maskWeight_81_Type" -ln "maskWeight_81_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "maskWeight_81" -ln "maskWeight_81" -nn "Channel 81 Multiplier" + -ct "HW_shader_parameter" -min 0 -smx 1 -at "float"; + setAttr ".vpar" -type "stringArray" 7 "Position" "TexCoord0" "TexCoord1" "TexCoord2" "Normal" "Binormal0" "Tangent0" ; + setAttr ".upar" -type "stringArray" 249 "light0Enable" "light0Type" "light0Pos" "light0Color" "light0Intensity" "light0Dir" "light0ConeAngle" "light0FallOff" "light0AttenScale" "light0ShadowOn" "light1Enable" "light1Type" "light1Pos" "light1Color" "light1Intensity" "light1Dir" "light1ConeAngle" "light1FallOff" "light1AttenScale" "light1ShadowOn" "light2Enable" "light2Type" "light2Pos" "light2Color" "light2Intensity" "light2Dir" "light2ConeAngle" "light2FallOff" "light2AttenScale" "light2ShadowOn" "SuperFilterTaps" "shadowMapTexelSize" "IsSwatchRender" "screenSize" "MayaFullScreenGamma" "LinearSpaceLighting" "UseShadows" "shadowMultiplier" "shadowDepthBias" "flipBackfaceNormals" "SkyRotation" "UseDiffuseIBLMap" "DiffuseIBLIntensity" "DiffuseCubeIBL" "UseSpecCubeIBL" "SpecularIBLIntensity" "SpecularCubeIBL" "UseDiffuseTexture" "UseDiffuseTextureAlpha" "DiffuseTexture" "DiffuseColor" "LutTexture" "DitherTexture" "skinCoeffX" "skinCoeffY" "skinCoeffZ" "NormalBlurring" "UseScatteringRadiusTexture" "ScatteringRadiusTexture" "skinScattering" "shadowDither" "shadowBlur" "shadowScattering" "shadowSaturation" "UseTranslucency" "BackScatteringThicknessTexture" "UseThicknessTexture" "skinScatteringRoughness" "skinScatteringOuterColor" "skinScatteringAmount" "skinAmbientScatteringAmount" "transpDepthTexture" "opaqueDepthTexture" "UseSpecularTexture" "UseSpecularTextureAlpha" "SpecularTexture" "SpecularColor" "LobeMix" "Roughness" "UseAmbientOcclusionTexture" "OcclusionTexture" "OcclusionAmount" "UseCavityTexture" "CavityTexture" "CavityAmount" "UseNormalTexture" "NormalTexture" "NormalHeight" "SupportNonUniformScale" "NormalCoordsysX" "NormalCoordsysY" "UseMicroCavityTexture" "MicroCavityTexture" "MicroCavityAmount" "UseMicroNormalTexture" "MicroNormalTexture" "MicroNormalHeight" "MicroScale" "OpacityMaskTexture" "Opacity" "UseOpacityMaskTexture" "OpacityMaskBias" "DisplacementModel" "UseDisplacementMap" "DisplacementTexture" "VectorDisplacementCoordSys" "DisplacementHeight" "DisplacementOffset" "DisplacementClippingBias" "BBoxExtraScale" "TessellationRange" "TessellationMin" "FlatTessellation" "UseBlendTexture" "animNormalMap_00" "maskChannel_00" "maskChannel_01" "animNormalMap_01" "maskChannel_02" "animNormalMap_02" "maskChannel_03" "animColorMap_00" "maskChannel_04" "animColorMap_01" "animColorMap_02" "maskChannel_05" "maskWeight_00" "maskChannel_06" "maskWeight_01" "maskChannel_07" "maskWeight_02" "maskChannel_08" "maskChannel_09" "maskWeight_03" "maskChannel_10" "maskWeight_04" "maskWeight_05" "maskChannel_11" "maskWeight_06" "maskChannel_12" "maskChannel_13" "maskWeight_07" "maskWeight_08" "maskChannel_14" "maskChannel_15" "maskWeight_09" "maskChannel_16" "maskWeight_10" "maskChannel_17" "maskWeight_11" "maskWeight_12" "maskChannel_18" "maskWeight_13" "maskChannel_19" "maskWeight_14" "maskChannel_20" "maskWeight_15" "maskChannel_21" "maskWeight_16" "maskChannel_22" "maskWeight_17" "maskChannel_23" "maskWeight_18" "maskChannel_24" "maskChannel_25" "maskWeight_19" "maskWeight_20" "maskChannel_26" "maskWeight_21" "maskChannel_27" "maskWeight_22" "maskChannel_28" "maskWeight_23" "maskChannel_29" "maskChannel_30" "maskWeight_24" "maskWeight_25" "maskChannel_31" "maskWeight_26" "maskChannel_32" "maskWeight_27" "maskChannel_33" "maskWeight_28" "maskChannel_34" "maskWeight_29" "maskChannel_35" "maskWeight_30" "maskChannel_36" "maskWeight_31" "maskWeight_32" "maskWeight_33" "maskWeight_34" "maskWeight_35" "maskWeight_36" "maskWeight_37" "maskWeight_38" "maskWeight_39" "maskWeight_40" "maskWeight_41" "maskWeight_42" "maskWeight_43" "maskWeight_44" "maskWeight_45" "maskWeight_46" "maskWeight_47" "maskWeight_48" "maskWeight_49" "maskWeight_50" "maskWeight_51" "maskWeight_52" "maskWeight_53" "maskWeight_54" "maskWeight_55" "maskWeight_56" "maskWeight_57" "maskWeight_58" "maskWeight_59" "maskWeight_60" "maskWeight_61" "maskWeight_62" "maskWeight_63" "maskWeight_64" "maskWeight_65" "maskWeight_66" "maskWeight_67" "maskWeight_68" "maskWeight_69" "maskWeight_70" "maskWeight_71" "maskWeight_72" "maskWeight_73" "maskWeight_74" "maskWeight_75" "maskWeight_76" "maskWeight_77" "maskWeight_78" "maskWeight_79" "maskWeight_80" "maskWeight_81" "DiffuseTexcoord" "OcclusionTexcoord" "OpacityMaskTexcoord" "SpecularTexcoord" "NormalTexcoord" "DisplacementTexcoord" "ThicknessTexcoord" "light0ShadowMap" "light1ShadowMap" "light2ShadowMap" ; + setAttr ".s" -type "string" "$PROJECT_ROOT/Common/SourceAssets/shaders/dx11_shd_head.fx"; + setAttr ".t" -type "string" "TessellationOFF"; + setAttr ".SuperFilterTaps_Name" -type "string" "SuperFilterTaps"; + setAttr ".SuperFilterTaps_Type" -type "string" "float1x2"; + setAttr ".SuperFilterTaps" -type "float2" -0.84052002 -0.073954001 ; + setAttr ".shadowMapTexelSize_Name" -type "string" "shadowMapTexelSize"; + setAttr ".shadowMapTexelSize_Type" -type "string" "float"; + setAttr ".shadowMapTexelSize" 0.0019531298894435167; + setAttr ".LinearSpaceLighting_Name" -type "string" "LinearSpaceLighting"; + setAttr ".LinearSpaceLighting_Type" -type "string" "bool"; + setAttr -k on ".LinearSpaceLighting" yes; + setAttr ".UseShadows_Name" -type "string" "UseShadows"; + setAttr ".UseShadows_Type" -type "string" "bool"; + setAttr -k on ".UseShadows" yes; + setAttr ".shadowMultiplier_Name" -type "string" "shadowMultiplier"; + setAttr ".shadowMultiplier_Type" -type "string" "float"; + setAttr -k on ".shadowMultiplier" 1; + setAttr ".IsSwatchRender_Name" -type "string" "IsSwatchRender"; + setAttr ".IsSwatchRender_Type" -type "string" "bool"; + setAttr ".IsSwatchRender" no; + setAttr ".shadowDepthBias_Name" -type "string" "shadowDepthBias"; + setAttr ".shadowDepthBias_Type" -type "string" "float"; + setAttr -k on ".shadowDepthBias" 0.0099999997764825821; + setAttr ".MayaFullScreenGamma_Name" -type "string" "MayaFullScreenGamma"; + setAttr ".MayaFullScreenGamma_Type" -type "string" "bool"; + setAttr ".MayaFullScreenGamma" no; + setAttr ".flipBackfaceNormals_Name" -type "string" "flipBackfaceNormals"; + setAttr ".flipBackfaceNormals_Type" -type "string" "bool"; + setAttr -k on ".flipBackfaceNormals" yes; + setAttr ".light0Enable_Name" -type "string" "light0Enable"; + setAttr ".light0Enable_Type" -type "string" "bool"; + setAttr -l on -k on ".light0Enable" no; + setAttr ".light0Type_Name" -type "string" "light0Type"; + setAttr ".light0Type_Type" -type "string" "enum"; + setAttr -l on -k on ".light0Type" 2; + setAttr ".light0Pos_Name" -type "string" "light0Pos"; + setAttr ".light0Pos_Type" -type "string" "matrix1x3"; + setAttr -l on -k on ".light0Pos" -type "matrix" 1 0 0 0 0 1 0 0 0 0 1 0 100 100 100 1; + setAttr ".light0Color_Name" -type "string" "light0Color"; + setAttr ".light0Color_Type" -type "string" "color1x3"; + setAttr -l on -k on ".light0Color" -type "float3" 1 1 1 ; + setAttr -l on -k on ".light0Color"; + setAttr ".light0Intensity_Name" -type "string" "light0Intensity"; + setAttr ".light0Intensity_Type" -type "string" "float"; + setAttr -l on -k on ".light0Intensity" 1; + setAttr ".light0Dir_Name" -type "string" "light0Dir"; + setAttr ".light0Dir_Type" -type "string" "matrix1x3"; + setAttr -l on -k on ".light0Dir" -type "matrix" 1 0 0 0 0 1 0 0 -100 -100 -100 0 + 0 0 0 1; + setAttr ".light0ConeAngle_Name" -type "string" "light0ConeAngle"; + setAttr ".light0ConeAngle_Type" -type "string" "float"; + setAttr -l on -k on ".light0ConeAngle" 0.46000000834465027; + setAttr ".light0FallOff_Name" -type "string" "light0FallOff"; + setAttr ".light0FallOff_Type" -type "string" "float"; + setAttr -l on -k on ".light0FallOff" 0.69999998807907104; + setAttr ".light0AttenScale_Name" -type "string" "light0AttenScale"; + setAttr ".light0AttenScale_Type" -type "string" "float"; + setAttr -l on -k on ".light0AttenScale" 0; + setAttr ".light0ShadowOn_Name" -type "string" "light0ShadowOn"; + setAttr ".light0ShadowOn_Type" -type "string" "bool"; + setAttr ".light0ShadowOn" yes; + setAttr ".light1Enable_Name" -type "string" "light1Enable"; + setAttr ".light1Enable_Type" -type "string" "bool"; + setAttr -l on -k on ".light1Enable" no; + setAttr ".light1Type_Name" -type "string" "light1Type"; + setAttr ".light1Type_Type" -type "string" "enum"; + setAttr -l on -k on ".light1Type" 2; + setAttr ".light1Pos_Name" -type "string" "light1Pos"; + setAttr ".light1Pos_Type" -type "string" "matrix1x3"; + setAttr -l on -k on ".light1Pos" -type "matrix" 1 0 0 0 0 1 0 0 0 0 1 0 -100 100 100 1; + setAttr ".light1Color_Name" -type "string" "light1Color"; + setAttr ".light1Color_Type" -type "string" "color1x3"; + setAttr -l on -k on ".light1Color" -type "float3" 1 1 1 ; + setAttr -l on -k on ".light1Color"; + setAttr ".light1Intensity_Name" -type "string" "light1Intensity"; + setAttr ".light1Intensity_Type" -type "string" "float"; + setAttr -l on -k on ".light1Intensity" 1; + setAttr ".light1Dir_Name" -type "string" "light1Dir"; + setAttr ".light1Dir_Type" -type "string" "matrix1x3"; + setAttr -l on -k on ".light1Dir" -type "matrix" 1 0 0 0 0 1 0 0 -100 -100 -100 0 + 0 0 0 1; + setAttr ".light1ConeAngle_Name" -type "string" "light1ConeAngle"; + setAttr ".light1ConeAngle_Type" -type "string" "float"; + setAttr -l on -k on ".light1ConeAngle" 45; + setAttr ".light1FallOff_Name" -type "string" "light1FallOff"; + setAttr ".light1FallOff_Type" -type "string" "float"; + setAttr -l on -k on ".light1FallOff" 0; + setAttr ".light1AttenScale_Name" -type "string" "light1AttenScale"; + setAttr ".light1AttenScale_Type" -type "string" "float"; + setAttr -l on -k on ".light1AttenScale" 0; + setAttr ".light1ShadowOn_Name" -type "string" "light1ShadowOn"; + setAttr ".light1ShadowOn_Type" -type "string" "bool"; + setAttr ".light1ShadowOn" yes; + setAttr ".light2Enable_Name" -type "string" "light2Enable"; + setAttr ".light2Enable_Type" -type "string" "bool"; + setAttr -l on -k on ".light2Enable" no; + setAttr ".light2Type_Name" -type "string" "light2Type"; + setAttr ".light2Type_Type" -type "string" "enum"; + setAttr -l on -k on ".light2Type" 2; + setAttr ".light2Pos_Name" -type "string" "light2Pos"; + setAttr ".light2Pos_Type" -type "string" "matrix1x3"; + setAttr -l on -k on ".light2Pos" -type "matrix" 1 0 0 0 0 1 0 0 0 0 1 0 100 100 -100 1; + setAttr ".light2Color_Name" -type "string" "light2Color"; + setAttr ".light2Color_Type" -type "string" "color1x3"; + setAttr -l on -k on ".light2Color" -type "float3" 1 1 1 ; + setAttr -l on -k on ".light2Color"; + setAttr ".light2Intensity_Name" -type "string" "light2Intensity"; + setAttr ".light2Intensity_Type" -type "string" "float"; + setAttr -l on -k on ".light2Intensity" 1; + setAttr ".light2Dir_Name" -type "string" "light2Dir"; + setAttr ".light2Dir_Type" -type "string" "matrix1x3"; + setAttr -l on -k on ".light2Dir" -type "matrix" 1 0 0 0 0 1 0 0 -100 -100 -100 0 + 0 0 0 1; + setAttr ".light2ConeAngle_Name" -type "string" "light2ConeAngle"; + setAttr ".light2ConeAngle_Type" -type "string" "float"; + setAttr -l on -k on ".light2ConeAngle" 45; + setAttr ".light2FallOff_Name" -type "string" "light2FallOff"; + setAttr ".light2FallOff_Type" -type "string" "float"; + setAttr -l on -k on ".light2FallOff" 0; + setAttr ".light2AttenScale_Name" -type "string" "light2AttenScale"; + setAttr ".light2AttenScale_Type" -type "string" "float"; + setAttr -l on -k on ".light2AttenScale" 0; + setAttr ".light2ShadowOn_Name" -type "string" "light2ShadowOn"; + setAttr ".light2ShadowOn_Type" -type "string" "bool"; + setAttr ".light2ShadowOn" yes; + setAttr ".UseAmbientOcclusionTexture_Name" -type "string" "UseAmbientOcclusionTexture"; + setAttr ".UseAmbientOcclusionTexture_Type" -type "string" "bool"; + setAttr -k on ".UseAmbientOcclusionTexture" yes; + setAttr ".transpDepthTexture_Name" -type "string" "transpDepthTexture"; + setAttr ".transpDepthTexture_Type" -type "string" "texture"; + setAttr ".transpDepthTexture" -type "float3" 0 0 0 ; + setAttr ".opaqueDepthTexture_Name" -type "string" "opaqueDepthTexture"; + setAttr ".opaqueDepthTexture_Type" -type "string" "texture"; + setAttr ".opaqueDepthTexture" -type "float3" 0 0 0 ; + setAttr ".UseDiffuseTexture_Name" -type "string" "UseDiffuseTexture"; + setAttr ".UseDiffuseTexture_Type" -type "string" "bool"; + setAttr -k on ".UseDiffuseTexture" yes; + setAttr ".UseDiffuseTextureAlpha_Name" -type "string" "UseDiffuseTextureAlpha"; + setAttr ".UseDiffuseTextureAlpha_Type" -type "string" "bool"; + setAttr -k on ".UseDiffuseTextureAlpha" no; + setAttr ".DiffuseTexture_Name" -type "string" "DiffuseTexture"; + setAttr ".DiffuseTexture_Type" -type "string" "texture"; + setAttr ".DiffuseTexture" -type "float3" 0 0 0 ; + setAttr ".DiffuseColor_Name" -type "string" "DiffuseColor"; + setAttr ".DiffuseColor_Type" -type "string" "color1x3"; + setAttr -k on ".DiffuseColor" -type "float3" 1 1 1 ; + setAttr ".Opacity_Name" -type "string" "Opacity"; + setAttr ".Opacity_Type" -type "string" "float"; + setAttr -k on ".Opacity" 1; + setAttr ".UseOpacityMaskTexture_Name" -type "string" "UseOpacityMaskTexture"; + setAttr ".UseOpacityMaskTexture_Type" -type "string" "bool"; + setAttr -k on ".UseOpacityMaskTexture" no; + setAttr ".OpacityMaskTexture_Name" -type "string" "OpacityMaskTexture"; + setAttr ".OpacityMaskTexture_Type" -type "string" "texture"; + setAttr ".OpacityMaskTexture" -type "float3" 0 0 0 ; + setAttr ".OpacityMaskBias_Name" -type "string" "OpacityMaskBias"; + setAttr ".OpacityMaskBias_Type" -type "string" "float"; + setAttr -k on ".OpacityMaskBias" 0.10000000149011612; + setAttr ".UseSpecularTexture_Name" -type "string" "UseSpecularTexture"; + setAttr ".UseSpecularTexture_Type" -type "string" "bool"; + setAttr -k on ".UseSpecularTexture" yes; + setAttr ".SpecularTexture_Name" -type "string" "SpecularTexture"; + setAttr ".SpecularTexture_Type" -type "string" "texture"; + setAttr ".SpecularTexture" -type "float3" 0 0 0 ; + setAttr ".SpecularColor_Name" -type "string" "SpecularColor"; + setAttr ".SpecularColor_Type" -type "string" "color1x3"; + setAttr -k on ".SpecularColor" -type "float3" 0.56862748 0.56862748 0.56862748 ; + setAttr ".UseNormalTexture_Name" -type "string" "UseNormalTexture"; + setAttr ".UseNormalTexture_Type" -type "string" "bool"; + setAttr -k on ".UseNormalTexture" yes; + setAttr ".NormalTexture_Name" -type "string" "NormalTexture"; + setAttr ".NormalTexture_Type" -type "string" "texture"; + setAttr ".NormalTexture" -type "float3" 0 0 0 ; + setAttr ".NormalHeight_Name" -type "string" "NormalHeight"; + setAttr ".NormalHeight_Type" -type "string" "float"; + setAttr -k on ".NormalHeight" 1; + setAttr ".SupportNonUniformScale_Name" -type "string" "SupportNonUniformScale"; + setAttr ".SupportNonUniformScale_Type" -type "string" "bool"; + setAttr -k on ".SupportNonUniformScale" yes; + setAttr ".NormalCoordsysX_Name" -type "string" "NormalCoordsysX"; + setAttr ".NormalCoordsysX_Type" -type "string" "enum"; + setAttr -k on ".NormalCoordsysX" 0; + setAttr ".NormalCoordsysY_Name" -type "string" "NormalCoordsysY"; + setAttr ".NormalCoordsysY_Type" -type "string" "enum"; + setAttr -k on ".NormalCoordsysY" 1; + setAttr ".DisplacementModel_Name" -type "string" "DisplacementModel"; + setAttr ".DisplacementModel_Type" -type "string" "enum"; + setAttr -k on ".DisplacementModel" 0; + setAttr ".UseDisplacementMap_Name" -type "string" "UseDisplacementMap"; + setAttr ".UseDisplacementMap_Type" -type "string" "bool"; + setAttr -k on ".UseDisplacementMap" no; + setAttr ".DisplacementTexture_Name" -type "string" "DisplacementTexture"; + setAttr ".DisplacementTexture_Type" -type "string" "texture"; + setAttr ".DisplacementTexture" -type "float3" 0 0 0 ; + setAttr ".VectorDisplacementCoordSys_Name" -type "string" "VectorDisplacementCoordSys"; + setAttr ".VectorDisplacementCoordSys_Type" -type "string" "enum"; + setAttr -k on ".VectorDisplacementCoordSys" 0; + setAttr ".DisplacementHeight_Name" -type "string" "DisplacementHeight"; + setAttr ".DisplacementHeight_Type" -type "string" "float"; + setAttr -k on ".DisplacementHeight" 0.5; + setAttr ".DisplacementOffset_Name" -type "string" "DisplacementOffset"; + setAttr ".DisplacementOffset_Type" -type "string" "float"; + setAttr -k on ".DisplacementOffset" 0.5; + setAttr ".DisplacementClippingBias_Name" -type "string" "DisplacementClippingBias"; + setAttr ".DisplacementClippingBias_Type" -type "string" "float"; + setAttr -k on ".DisplacementClippingBias" 5; + setAttr ".BBoxExtraScale_Name" -type "string" "BBoxExtraScale"; + setAttr ".BBoxExtraScale_Type" -type "string" "float"; + setAttr -k on ".BBoxExtraScale" 1; + setAttr ".TessellationRange_Name" -type "string" "TessellationRange"; + setAttr ".TessellationRange_Type" -type "string" "float"; + setAttr -k on ".TessellationRange" 0; + setAttr ".TessellationMin_Name" -type "string" "TessellationMin"; + setAttr ".TessellationMin_Type" -type "string" "float"; + setAttr -k on ".TessellationMin" 3; + setAttr ".FlatTessellation_Name" -type "string" "FlatTessellation"; + setAttr ".FlatTessellation_Type" -type "string" "float"; + setAttr -k on ".FlatTessellation" 0; + setAttr ".UseTranslucency_Name" -type "string" "UseTranslucency"; + setAttr ".UseTranslucency_Type" -type "string" "bool"; + setAttr -k on ".UseTranslucency" yes; + setAttr ".UseThicknessTexture_Name" -type "string" "UseThicknessTexture"; + setAttr ".UseThicknessTexture_Type" -type "string" "bool"; + setAttr -k on ".UseThicknessTexture" yes; + setAttr ".UseDiffuseIBLMap_Name" -type "string" "UseDiffuseIBLMap"; + setAttr ".UseDiffuseIBLMap_Type" -type "string" "bool"; + setAttr -k on ".UseDiffuseIBLMap" yes; + setAttr ".DiffuseIBLIntensity_Name" -type "string" "DiffuseIBLIntensity"; + setAttr ".DiffuseIBLIntensity_Type" -type "string" "float"; + setAttr -k on ".DiffuseIBLIntensity" 0.64999997615814209; + setAttr ".DiffuseTexcoord_Name" -type "string" "DiffuseTexcoord"; + setAttr ".DiffuseTexcoord_Type" -type "string" "enum"; + setAttr -k on ".DiffuseTexcoord" 0; + setAttr ".OpacityMaskTexcoord_Name" -type "string" "OpacityMaskTexcoord"; + setAttr ".OpacityMaskTexcoord_Type" -type "string" "enum"; + setAttr -k on ".OpacityMaskTexcoord" 0; + setAttr ".SpecularTexcoord_Name" -type "string" "SpecularTexcoord"; + setAttr ".SpecularTexcoord_Type" -type "string" "enum"; + setAttr -k on ".SpecularTexcoord" 0; + setAttr ".NormalTexcoord_Name" -type "string" "NormalTexcoord"; + setAttr ".NormalTexcoord_Type" -type "string" "enum"; + setAttr -k on ".NormalTexcoord" 0; + setAttr ".DisplacementTexcoord_Name" -type "string" "DisplacementTexcoord"; + setAttr ".DisplacementTexcoord_Type" -type "string" "enum"; + setAttr -k on ".DisplacementTexcoord" 0; + setAttr ".ThicknessTexcoord_Name" -type "string" "ThicknessTexcoord"; + setAttr ".ThicknessTexcoord_Type" -type "string" "enum"; + setAttr -k on ".ThicknessTexcoord" 0; + setAttr ".light0ShadowMap_Name" -type "string" "light0ShadowMap"; + setAttr ".light0ShadowMap_Type" -type "string" "texture"; + setAttr ".light0ShadowMap" -type "float3" 0 0 0 ; + setAttr ".light1ShadowMap_Name" -type "string" "light1ShadowMap"; + setAttr ".light1ShadowMap_Type" -type "string" "texture"; + setAttr ".light1ShadowMap" -type "float3" 0 0 0 ; + setAttr ".light2ShadowMap_Name" -type "string" "light2ShadowMap"; + setAttr ".light2ShadowMap_Type" -type "string" "texture"; + setAttr ".light2ShadowMap" -type "float3" 0 0 0 ; + setAttr ".screenSize_Name" -type "string" "screenSize"; + setAttr ".screenSize_Type" -type "string" "float1x2"; + setAttr ".screenSize" -type "float2" 0 0 ; + setAttr ".SkyRotation_Name" -type "string" "SkyRotation"; + setAttr ".SkyRotation_Type" -type "string" "float"; + setAttr -k on ".SkyRotation" 12.5; + setAttr ".DiffuseCubeIBL_Name" -type "string" "DiffuseCubeIBL"; + setAttr ".DiffuseCubeIBL_Type" -type "string" "texture"; + setAttr ".DiffuseCubeIBL" -type "float3" 0 0 0 ; + setAttr ".UseSpecCubeIBL_Name" -type "string" "UseSpecCubeIBL"; + setAttr ".UseSpecCubeIBL_Type" -type "string" "bool"; + setAttr -k on ".UseSpecCubeIBL" yes; + setAttr ".SpecularIBLIntensity_Name" -type "string" "SpecularIBLIntensity"; + setAttr ".SpecularIBLIntensity_Type" -type "string" "float"; + setAttr -k on ".SpecularIBLIntensity" 1.1847133636474609; + setAttr ".SpecularCubeIBL_Name" -type "string" "SpecularCubeIBL"; + setAttr ".SpecularCubeIBL_Type" -type "string" "texture"; + setAttr ".SpecularCubeIBL" -type "float3" 0 0 0 ; + setAttr ".LutTexture_Name" -type "string" "LutTexture"; + setAttr ".LutTexture_Type" -type "string" "texture"; + setAttr ".LutTexture" -type "float3" 0 0 0 ; + setAttr ".DitherTexture_Name" -type "string" "DitherTexture"; + setAttr ".DitherTexture_Type" -type "string" "texture"; + setAttr ".DitherTexture" -type "float3" 0 0 0 ; + setAttr ".skinCoeffX_Name" -type "string" "skinCoeffX"; + setAttr ".skinCoeffX_Type" -type "string" "float"; + setAttr -k on ".skinCoeffX" 0.79500001668930054; + setAttr ".skinCoeffY_Name" -type "string" "skinCoeffY"; + setAttr ".skinCoeffY_Type" -type "string" "float"; + setAttr -k on ".skinCoeffY" 0.28799998760223389; + setAttr ".skinCoeffZ_Name" -type "string" "skinCoeffZ"; + setAttr ".skinCoeffZ_Type" -type "string" "float"; + setAttr -k on ".skinCoeffZ" 0.030999999493360519; + setAttr ".NormalBlurring_Name" -type "string" "NormalBlurring"; + setAttr ".NormalBlurring_Type" -type "string" "float"; + setAttr -k on ".NormalBlurring" 1; + setAttr ".UseScatteringRadiusTexture_Name" -type "string" "UseScatteringRadiusTexture"; + setAttr ".UseScatteringRadiusTexture_Type" -type "string" "bool"; + setAttr -k on ".UseScatteringRadiusTexture" no; + setAttr ".ScatteringRadiusTexture_Name" -type "string" "ScatteringRadiusTexture"; + setAttr ".ScatteringRadiusTexture_Type" -type "string" "texture"; + setAttr ".ScatteringRadiusTexture" -type "float3" 0 0 0 ; + setAttr ".skinScattering_Name" -type "string" "skinScattering"; + setAttr ".skinScattering_Type" -type "string" "float"; + setAttr -k on ".skinScattering" 0.38999998569488525; + setAttr ".shadowDither_Name" -type "string" "shadowDither"; + setAttr ".shadowDither_Type" -type "string" "float"; + setAttr -k on ".shadowDither" 0.086999997496604919; + setAttr ".shadowBlur_Name" -type "string" "shadowBlur"; + setAttr ".shadowBlur_Type" -type "string" "float"; + setAttr -k on ".shadowBlur" 1; + setAttr ".shadowScattering_Name" -type "string" "shadowScattering"; + setAttr ".shadowScattering_Type" -type "string" "float"; + setAttr -k on ".shadowScattering" 1; + setAttr ".shadowSaturation_Name" -type "string" "shadowSaturation"; + setAttr ".shadowSaturation_Type" -type "string" "float"; + setAttr -k on ".shadowSaturation" 1.2740000486373901; + setAttr ".BackScatteringThicknessTexture_Name" -type "string" "BackScatteringThicknessTexture"; + setAttr ".BackScatteringThicknessTexture_Type" -type "string" "texture"; + setAttr ".BackScatteringThicknessTexture" -type "float3" 0 0 0 ; + setAttr ".skinScatteringRoughness_Name" -type "string" "skinScatteringRoughness"; + setAttr ".skinScatteringRoughness_Type" -type "string" "float"; + setAttr -k on ".skinScatteringRoughness" 1; + setAttr ".skinScatteringOuterColor_Name" -type "string" "skinScatteringOuterColor"; + setAttr ".skinScatteringOuterColor_Type" -type "string" "color1x3"; + setAttr -k on ".skinScatteringOuterColor" -type "float3" 0.39607844 0.039215688 + 0 ; + setAttr ".skinScatteringAmount_Name" -type "string" "skinScatteringAmount"; + setAttr ".skinScatteringAmount_Type" -type "string" "float"; + setAttr -k on ".skinScatteringAmount" 0.30000001192092896; + setAttr ".skinAmbientScatteringAmount_Name" -type "string" "skinAmbientScatteringAmount"; + setAttr ".skinAmbientScatteringAmount_Type" -type "string" "float"; + setAttr -k on ".skinAmbientScatteringAmount" 0.76433122158050537; + setAttr ".UseSpecularTextureAlpha_Name" -type "string" "UseSpecularTextureAlpha"; + setAttr ".UseSpecularTextureAlpha_Type" -type "string" "bool"; + setAttr -k on ".UseSpecularTextureAlpha" no; + setAttr ".LobeMix_Name" -type "string" "LobeMix"; + setAttr ".LobeMix_Type" -type "string" "float"; + setAttr -k on ".LobeMix" 0.57099997997283936; + setAttr ".Roughness_Name" -type "string" "Roughness"; + setAttr ".Roughness_Type" -type "string" "float"; + setAttr -k on ".Roughness" 0.49000000953674316; + setAttr ".OcclusionTexture_Name" -type "string" "OcclusionTexture"; + setAttr ".OcclusionTexture_Type" -type "string" "texture"; + setAttr ".OcclusionTexture" -type "float3" 0 0 0 ; + setAttr ".OcclusionAmount_Name" -type "string" "OcclusionAmount"; + setAttr ".OcclusionAmount_Type" -type "string" "float"; + setAttr -k on ".OcclusionAmount" 0.5; + setAttr ".UseCavityTexture_Name" -type "string" "UseCavityTexture"; + setAttr ".UseCavityTexture_Type" -type "string" "bool"; + setAttr -k on ".UseCavityTexture" yes; + setAttr ".CavityTexture_Name" -type "string" "CavityTexture"; + setAttr ".CavityTexture_Type" -type "string" "texture"; + setAttr ".CavityTexture" -type "float3" 0 0 0 ; + setAttr ".CavityAmount_Name" -type "string" "CavityAmount"; + setAttr ".CavityAmount_Type" -type "string" "float"; + setAttr -k on ".CavityAmount" 1; + setAttr ".UseMicroCavityTexture_Name" -type "string" "UseMicroCavityTexture"; + setAttr ".UseMicroCavityTexture_Type" -type "string" "bool"; + setAttr -k on ".UseMicroCavityTexture" no; + setAttr ".MicroCavityTexture_Name" -type "string" "MicroCavityTexture"; + setAttr ".MicroCavityTexture_Type" -type "string" "texture"; + setAttr ".MicroCavityTexture" -type "float3" 0 0 0 ; + setAttr ".MicroCavityAmount_Name" -type "string" "MicroCavityAmount"; + setAttr ".MicroCavityAmount_Type" -type "string" "float"; + setAttr -k on ".MicroCavityAmount" 1; + setAttr ".UseMicroNormalTexture_Name" -type "string" "UseMicroNormalTexture"; + setAttr ".UseMicroNormalTexture_Type" -type "string" "bool"; + setAttr -k on ".UseMicroNormalTexture" no; + setAttr ".MicroNormalTexture_Name" -type "string" "MicroNormalTexture"; + setAttr ".MicroNormalTexture_Type" -type "string" "texture"; + setAttr ".MicroNormalTexture" -type "float3" 0 0 0 ; + setAttr ".MicroNormalHeight_Name" -type "string" "MicroNormalHeight"; + setAttr ".MicroNormalHeight_Type" -type "string" "float"; + setAttr -k on ".MicroNormalHeight" 1; + setAttr ".MicroScale_Name" -type "string" "MicroScale"; + setAttr ".MicroScale_Type" -type "string" "float"; + setAttr -k on ".MicroScale" 32; + setAttr ".UseBlendTexture_Name" -type "string" "UseBlendTexture"; + setAttr ".UseBlendTexture_Type" -type "string" "bool"; + setAttr -k on ".UseBlendTexture" yes; + setAttr ".OcclusionTexcoord_Name" -type "string" "OcclusionTexcoord"; + setAttr ".OcclusionTexcoord_Type" -type "string" "enum"; + setAttr -k on ".OcclusionTexcoord" 1; + setAttr ".Position_Name" -type "string" "Position"; + setAttr ".Position_Source" -type "string" "position"; + setAttr ".TexCoord0_Name" -type "string" "TexCoord0"; + setAttr ".TexCoord0_Source" -type "string" "uv:map1"; + setAttr ".TexCoord0_DefaultTexture" -type "string" "DiffuseTexture"; + setAttr ".TexCoord1_Name" -type "string" "TexCoord1"; + setAttr ".TexCoord1_Source" -type "string" "uv:map2"; + setAttr ".TexCoord1_DefaultTexture" -type "string" "DiffuseTexture"; + setAttr ".TexCoord2_Name" -type "string" "TexCoord2"; + setAttr ".TexCoord2_Source" -type "string" "uv:map3"; + setAttr ".TexCoord2_DefaultTexture" -type "string" "DiffuseTexture"; + setAttr ".Normal_Name" -type "string" "Normal"; + setAttr ".Normal_Source" -type "string" "normal"; + setAttr ".Binormal0_Name" -type "string" "Binormal0"; + setAttr ".Binormal0_Source" -type "string" "binormal:map1"; + setAttr ".Tangent0_Name" -type "string" "Tangent0"; + setAttr ".Tangent0_Source" -type "string" "tangent:map1"; + setAttr ".animNormalMap_00_Name" -type "string" "animNormalMap_00"; + setAttr ".animNormalMap_00_Type" -type "string" "texture"; + setAttr ".animNormalMap_00" -type "float3" 0 0 0 ; + setAttr ".maskChannel_00_Name" -type "string" "maskChannel_00"; + setAttr ".maskChannel_00_Type" -type "string" "texture"; + setAttr ".maskChannel_00" -type "float3" 0 0 0 ; + setAttr ".maskChannel_01_Name" -type "string" "maskChannel_01"; + setAttr ".maskChannel_01_Type" -type "string" "texture"; + setAttr ".maskChannel_01" -type "float3" 0 0 0 ; + setAttr ".animNormalMap_01_Name" -type "string" "animNormalMap_01"; + setAttr ".animNormalMap_01_Type" -type "string" "texture"; + setAttr ".animNormalMap_01" -type "float3" 0 0 0 ; + setAttr ".maskChannel_02_Name" -type "string" "maskChannel_02"; + setAttr ".maskChannel_02_Type" -type "string" "texture"; + setAttr ".maskChannel_02" -type "float3" 0 0 0 ; + setAttr ".animNormalMap_02_Name" -type "string" "animNormalMap_02"; + setAttr ".animNormalMap_02_Type" -type "string" "texture"; + setAttr ".animNormalMap_02" -type "float3" 0 0 0 ; + setAttr ".maskChannel_03_Name" -type "string" "maskChannel_03"; + setAttr ".maskChannel_03_Type" -type "string" "texture"; + setAttr ".maskChannel_03" -type "float3" 0 0 0 ; + setAttr ".animColorMap_00_Name" -type "string" "animColorMap_00"; + setAttr ".animColorMap_00_Type" -type "string" "texture"; + setAttr ".animColorMap_00" -type "float3" 0 0 0 ; + setAttr ".maskChannel_04_Name" -type "string" "maskChannel_04"; + setAttr ".maskChannel_04_Type" -type "string" "texture"; + setAttr ".maskChannel_04" -type "float3" 0 0 0 ; + setAttr ".animColorMap_01_Name" -type "string" "animColorMap_01"; + setAttr ".animColorMap_01_Type" -type "string" "texture"; + setAttr ".animColorMap_01" -type "float3" 0 0 0 ; + setAttr ".animColorMap_02_Name" -type "string" "animColorMap_02"; + setAttr ".animColorMap_02_Type" -type "string" "texture"; + setAttr ".animColorMap_02" -type "float3" 0 0 0 ; + setAttr ".maskChannel_05_Name" -type "string" "maskChannel_05"; + setAttr ".maskChannel_05_Type" -type "string" "texture"; + setAttr ".maskChannel_05" -type "float3" 0 0 0 ; + setAttr ".maskWeight_00_Name" -type "string" "maskWeight_00"; + setAttr ".maskWeight_00_Type" -type "string" "float"; + setAttr -k on ".maskWeight_00" 0; + setAttr ".maskChannel_06_Name" -type "string" "maskChannel_06"; + setAttr ".maskChannel_06_Type" -type "string" "texture"; + setAttr ".maskChannel_06" -type "float3" 0 0 0 ; + setAttr ".maskWeight_01_Name" -type "string" "maskWeight_01"; + setAttr ".maskWeight_01_Type" -type "string" "float"; + setAttr -k on ".maskWeight_01" 0; + setAttr ".maskChannel_07_Name" -type "string" "maskChannel_07"; + setAttr ".maskChannel_07_Type" -type "string" "texture"; + setAttr ".maskChannel_07" -type "float3" 0 0 0 ; + setAttr ".maskWeight_02_Name" -type "string" "maskWeight_02"; + setAttr ".maskWeight_02_Type" -type "string" "float"; + setAttr -k on ".maskWeight_02" 0; + setAttr ".maskChannel_08_Name" -type "string" "maskChannel_08"; + setAttr ".maskChannel_08_Type" -type "string" "texture"; + setAttr ".maskChannel_08" -type "float3" 0 0 0 ; + setAttr ".maskChannel_09_Name" -type "string" "maskChannel_09"; + setAttr ".maskChannel_09_Type" -type "string" "texture"; + setAttr ".maskChannel_09" -type "float3" 0 0 0 ; + setAttr ".maskWeight_03_Name" -type "string" "maskWeight_03"; + setAttr ".maskWeight_03_Type" -type "string" "float"; + setAttr -k on ".maskWeight_03" 0; + setAttr ".maskChannel_10_Name" -type "string" "maskChannel_10"; + setAttr ".maskChannel_10_Type" -type "string" "texture"; + setAttr ".maskChannel_10" -type "float3" 0 0 0 ; + setAttr ".maskWeight_04_Name" -type "string" "maskWeight_04"; + setAttr ".maskWeight_04_Type" -type "string" "float"; + setAttr -k on ".maskWeight_04" 0; + setAttr ".maskWeight_05_Name" -type "string" "maskWeight_05"; + setAttr ".maskWeight_05_Type" -type "string" "float"; + setAttr -k on ".maskWeight_05" 0; + setAttr ".maskChannel_11_Name" -type "string" "maskChannel_11"; + setAttr ".maskChannel_11_Type" -type "string" "texture"; + setAttr ".maskChannel_11" -type "float3" 0 0 0 ; + setAttr ".maskWeight_06_Name" -type "string" "maskWeight_06"; + setAttr ".maskWeight_06_Type" -type "string" "float"; + setAttr -k on ".maskWeight_06" 0; + setAttr ".maskChannel_12_Name" -type "string" "maskChannel_12"; + setAttr ".maskChannel_12_Type" -type "string" "texture"; + setAttr ".maskChannel_12" -type "float3" 0 0 0 ; + setAttr ".maskChannel_13_Name" -type "string" "maskChannel_13"; + setAttr ".maskChannel_13_Type" -type "string" "texture"; + setAttr ".maskChannel_13" -type "float3" 0 0 0 ; + setAttr ".maskWeight_07_Name" -type "string" "maskWeight_07"; + setAttr ".maskWeight_07_Type" -type "string" "float"; + setAttr -k on ".maskWeight_07" 0; + setAttr ".maskWeight_08_Name" -type "string" "maskWeight_08"; + setAttr ".maskWeight_08_Type" -type "string" "float"; + setAttr -k on ".maskWeight_08" 0; + setAttr ".maskChannel_14_Name" -type "string" "maskChannel_14"; + setAttr ".maskChannel_14_Type" -type "string" "texture"; + setAttr ".maskChannel_14" -type "float3" 0 0 0 ; + setAttr ".maskChannel_15_Name" -type "string" "maskChannel_15"; + setAttr ".maskChannel_15_Type" -type "string" "texture"; + setAttr ".maskChannel_15" -type "float3" 0 0 0 ; + setAttr ".maskWeight_09_Name" -type "string" "maskWeight_09"; + setAttr ".maskWeight_09_Type" -type "string" "float"; + setAttr -k on ".maskWeight_09" 0; + setAttr ".maskChannel_16_Name" -type "string" "maskChannel_16"; + setAttr ".maskChannel_16_Type" -type "string" "texture"; + setAttr ".maskChannel_16" -type "float3" 0 0 0 ; + setAttr ".maskWeight_10_Name" -type "string" "maskWeight_10"; + setAttr ".maskWeight_10_Type" -type "string" "float"; + setAttr -k on ".maskWeight_10" 0; + setAttr ".maskChannel_17_Name" -type "string" "maskChannel_17"; + setAttr ".maskChannel_17_Type" -type "string" "texture"; + setAttr ".maskChannel_17" -type "float3" 0 0 0 ; + setAttr ".maskWeight_11_Name" -type "string" "maskWeight_11"; + setAttr ".maskWeight_11_Type" -type "string" "float"; + setAttr -k on ".maskWeight_11" 0; + setAttr ".maskWeight_12_Name" -type "string" "maskWeight_12"; + setAttr ".maskWeight_12_Type" -type "string" "float"; + setAttr -k on ".maskWeight_12" 0; + setAttr ".maskChannel_18_Name" -type "string" "maskChannel_18"; + setAttr ".maskChannel_18_Type" -type "string" "texture"; + setAttr ".maskChannel_18" -type "float3" 0 0 0 ; + setAttr ".maskWeight_13_Name" -type "string" "maskWeight_13"; + setAttr ".maskWeight_13_Type" -type "string" "float"; + setAttr -k on ".maskWeight_13" 0; + setAttr ".maskChannel_19_Name" -type "string" "maskChannel_19"; + setAttr ".maskChannel_19_Type" -type "string" "texture"; + setAttr ".maskChannel_19" -type "float3" 0 0 0 ; + setAttr ".maskWeight_14_Name" -type "string" "maskWeight_14"; + setAttr ".maskWeight_14_Type" -type "string" "float"; + setAttr -k on ".maskWeight_14" 0; + setAttr ".maskChannel_20_Name" -type "string" "maskChannel_20"; + setAttr ".maskChannel_20_Type" -type "string" "texture"; + setAttr ".maskChannel_20" -type "float3" 0 0 0 ; + setAttr ".maskWeight_15_Name" -type "string" "maskWeight_15"; + setAttr ".maskWeight_15_Type" -type "string" "float"; + setAttr -k on ".maskWeight_15" 0; + setAttr ".maskChannel_21_Name" -type "string" "maskChannel_21"; + setAttr ".maskChannel_21_Type" -type "string" "texture"; + setAttr ".maskChannel_21" -type "float3" 0 0 0 ; + setAttr ".maskWeight_16_Name" -type "string" "maskWeight_16"; + setAttr ".maskWeight_16_Type" -type "string" "float"; + setAttr -k on ".maskWeight_16" 0; + setAttr ".maskChannel_22_Name" -type "string" "maskChannel_22"; + setAttr ".maskChannel_22_Type" -type "string" "texture"; + setAttr ".maskChannel_22" -type "float3" 0 0 0 ; + setAttr ".maskWeight_17_Name" -type "string" "maskWeight_17"; + setAttr ".maskWeight_17_Type" -type "string" "float"; + setAttr -k on ".maskWeight_17" 0; + setAttr ".maskChannel_23_Name" -type "string" "maskChannel_23"; + setAttr ".maskChannel_23_Type" -type "string" "texture"; + setAttr ".maskChannel_23" -type "float3" 0 0 0 ; + setAttr ".maskWeight_18_Name" -type "string" "maskWeight_18"; + setAttr ".maskWeight_18_Type" -type "string" "float"; + setAttr -k on ".maskWeight_18" 0; + setAttr ".maskChannel_24_Name" -type "string" "maskChannel_24"; + setAttr ".maskChannel_24_Type" -type "string" "texture"; + setAttr ".maskChannel_24" -type "float3" 0 0 0 ; + setAttr ".maskChannel_25_Name" -type "string" "maskChannel_25"; + setAttr ".maskChannel_25_Type" -type "string" "texture"; + setAttr ".maskChannel_25" -type "float3" 0 0 0 ; + setAttr ".maskWeight_19_Name" -type "string" "maskWeight_19"; + setAttr ".maskWeight_19_Type" -type "string" "float"; + setAttr -k on ".maskWeight_19" 0; + setAttr ".maskWeight_20_Name" -type "string" "maskWeight_20"; + setAttr ".maskWeight_20_Type" -type "string" "float"; + setAttr -k on ".maskWeight_20" 0; + setAttr ".maskChannel_26_Name" -type "string" "maskChannel_26"; + setAttr ".maskChannel_26_Type" -type "string" "texture"; + setAttr ".maskChannel_26" -type "float3" 0 0 0 ; + setAttr ".maskWeight_21_Name" -type "string" "maskWeight_21"; + setAttr ".maskWeight_21_Type" -type "string" "float"; + setAttr -k on ".maskWeight_21" 0; + setAttr ".maskChannel_27_Name" -type "string" "maskChannel_27"; + setAttr ".maskChannel_27_Type" -type "string" "texture"; + setAttr ".maskChannel_27" -type "float3" 0 0 0 ; + setAttr ".maskWeight_22_Name" -type "string" "maskWeight_22"; + setAttr ".maskWeight_22_Type" -type "string" "float"; + setAttr -k on ".maskWeight_22" 0; + setAttr ".maskChannel_28_Name" -type "string" "maskChannel_28"; + setAttr ".maskChannel_28_Type" -type "string" "texture"; + setAttr ".maskChannel_28" -type "float3" 0 0 0 ; + setAttr ".maskWeight_23_Name" -type "string" "maskWeight_23"; + setAttr ".maskWeight_23_Type" -type "string" "float"; + setAttr -k on ".maskWeight_23" 0; + setAttr ".maskChannel_29_Name" -type "string" "maskChannel_29"; + setAttr ".maskChannel_29_Type" -type "string" "texture"; + setAttr ".maskChannel_29" -type "float3" 0 0 0 ; + setAttr ".maskChannel_30_Name" -type "string" "maskChannel_30"; + setAttr ".maskChannel_30_Type" -type "string" "texture"; + setAttr ".maskChannel_30" -type "float3" 0 0 0 ; + setAttr ".maskWeight_24_Name" -type "string" "maskWeight_24"; + setAttr ".maskWeight_24_Type" -type "string" "float"; + setAttr -k on ".maskWeight_24" 0; + setAttr ".maskWeight_25_Name" -type "string" "maskWeight_25"; + setAttr ".maskWeight_25_Type" -type "string" "float"; + setAttr -k on ".maskWeight_25" 0; + setAttr ".maskChannel_31_Name" -type "string" "maskChannel_31"; + setAttr ".maskChannel_31_Type" -type "string" "texture"; + setAttr ".maskChannel_31" -type "float3" 0 0 0 ; + setAttr ".maskWeight_26_Name" -type "string" "maskWeight_26"; + setAttr ".maskWeight_26_Type" -type "string" "float"; + setAttr -k on ".maskWeight_26" 0; + setAttr ".maskChannel_32_Name" -type "string" "maskChannel_32"; + setAttr ".maskChannel_32_Type" -type "string" "texture"; + setAttr ".maskChannel_32" -type "float3" 0 0 0 ; + setAttr ".maskWeight_27_Name" -type "string" "maskWeight_27"; + setAttr ".maskWeight_27_Type" -type "string" "float"; + setAttr -k on ".maskWeight_27" 0; + setAttr ".maskChannel_33_Name" -type "string" "maskChannel_33"; + setAttr ".maskChannel_33_Type" -type "string" "texture"; + setAttr ".maskChannel_33" -type "float3" 0 0 0 ; + setAttr ".maskWeight_28_Name" -type "string" "maskWeight_28"; + setAttr ".maskWeight_28_Type" -type "string" "float"; + setAttr -k on ".maskWeight_28" 0; + setAttr ".maskChannel_34_Name" -type "string" "maskChannel_34"; + setAttr ".maskChannel_34_Type" -type "string" "texture"; + setAttr ".maskChannel_34" -type "float3" 0 0 0 ; + setAttr ".maskWeight_29_Name" -type "string" "maskWeight_29"; + setAttr ".maskWeight_29_Type" -type "string" "float"; + setAttr -k on ".maskWeight_29" 0; + setAttr ".maskChannel_35_Name" -type "string" "maskChannel_35"; + setAttr ".maskChannel_35_Type" -type "string" "texture"; + setAttr ".maskChannel_35" -type "float3" 0 0 0 ; + setAttr ".maskWeight_30_Name" -type "string" "maskWeight_30"; + setAttr ".maskWeight_30_Type" -type "string" "float"; + setAttr -k on ".maskWeight_30" 0; + setAttr ".maskChannel_36_Name" -type "string" "maskChannel_36"; + setAttr ".maskChannel_36_Type" -type "string" "texture"; + setAttr ".maskChannel_36" -type "float3" 0 0 0 ; + setAttr ".maskWeight_31_Name" -type "string" "maskWeight_31"; + setAttr ".maskWeight_31_Type" -type "string" "float"; + setAttr -k on ".maskWeight_31" 0; + setAttr ".maskWeight_32_Name" -type "string" "maskWeight_32"; + setAttr ".maskWeight_32_Type" -type "string" "float"; + setAttr -k on ".maskWeight_32" 0; + setAttr ".maskWeight_33_Name" -type "string" "maskWeight_33"; + setAttr ".maskWeight_33_Type" -type "string" "float"; + setAttr -k on ".maskWeight_33" 0; + setAttr ".maskWeight_34_Name" -type "string" "maskWeight_34"; + setAttr ".maskWeight_34_Type" -type "string" "float"; + setAttr -k on ".maskWeight_34" 0; + setAttr ".maskWeight_35_Name" -type "string" "maskWeight_35"; + setAttr ".maskWeight_35_Type" -type "string" "float"; + setAttr -k on ".maskWeight_35" 0; + setAttr ".maskWeight_36_Name" -type "string" "maskWeight_36"; + setAttr ".maskWeight_36_Type" -type "string" "float"; + setAttr -k on ".maskWeight_36" 0; + setAttr ".maskWeight_37_Name" -type "string" "maskWeight_37"; + setAttr ".maskWeight_37_Type" -type "string" "float"; + setAttr -k on ".maskWeight_37" 0; + setAttr ".maskWeight_38_Name" -type "string" "maskWeight_38"; + setAttr ".maskWeight_38_Type" -type "string" "float"; + setAttr -k on ".maskWeight_38" 0; + setAttr ".maskWeight_39_Name" -type "string" "maskWeight_39"; + setAttr ".maskWeight_39_Type" -type "string" "float"; + setAttr -k on ".maskWeight_39" 0; + setAttr ".maskWeight_40_Name" -type "string" "maskWeight_40"; + setAttr ".maskWeight_40_Type" -type "string" "float"; + setAttr -k on ".maskWeight_40" 0; + setAttr ".maskWeight_41_Name" -type "string" "maskWeight_41"; + setAttr ".maskWeight_41_Type" -type "string" "float"; + setAttr -k on ".maskWeight_41" 0; + setAttr ".maskWeight_42_Name" -type "string" "maskWeight_42"; + setAttr ".maskWeight_42_Type" -type "string" "float"; + setAttr -k on ".maskWeight_42" 0; + setAttr ".maskWeight_43_Name" -type "string" "maskWeight_43"; + setAttr ".maskWeight_43_Type" -type "string" "float"; + setAttr -k on ".maskWeight_43" 0; + setAttr ".maskWeight_44_Name" -type "string" "maskWeight_44"; + setAttr ".maskWeight_44_Type" -type "string" "float"; + setAttr -k on ".maskWeight_44" 0; + setAttr ".maskWeight_45_Name" -type "string" "maskWeight_45"; + setAttr ".maskWeight_45_Type" -type "string" "float"; + setAttr -k on ".maskWeight_45" 0; + setAttr ".maskWeight_46_Name" -type "string" "maskWeight_46"; + setAttr ".maskWeight_46_Type" -type "string" "float"; + setAttr -k on ".maskWeight_46" 0; + setAttr ".maskWeight_47_Name" -type "string" "maskWeight_47"; + setAttr ".maskWeight_47_Type" -type "string" "float"; + setAttr -k on ".maskWeight_47" 0; + setAttr ".maskWeight_48_Name" -type "string" "maskWeight_48"; + setAttr ".maskWeight_48_Type" -type "string" "float"; + setAttr -k on ".maskWeight_48" 0; + setAttr ".maskWeight_49_Name" -type "string" "maskWeight_49"; + setAttr ".maskWeight_49_Type" -type "string" "float"; + setAttr -k on ".maskWeight_49" 0; + setAttr ".maskWeight_50_Name" -type "string" "maskWeight_50"; + setAttr ".maskWeight_50_Type" -type "string" "float"; + setAttr -k on ".maskWeight_50" 0; + setAttr ".maskWeight_51_Name" -type "string" "maskWeight_51"; + setAttr ".maskWeight_51_Type" -type "string" "float"; + setAttr -k on ".maskWeight_51" 0; + setAttr ".maskWeight_52_Name" -type "string" "maskWeight_52"; + setAttr ".maskWeight_52_Type" -type "string" "float"; + setAttr -k on ".maskWeight_52" 0; + setAttr ".maskWeight_53_Name" -type "string" "maskWeight_53"; + setAttr ".maskWeight_53_Type" -type "string" "float"; + setAttr -k on ".maskWeight_53" 0; + setAttr ".maskWeight_54_Name" -type "string" "maskWeight_54"; + setAttr ".maskWeight_54_Type" -type "string" "float"; + setAttr -k on ".maskWeight_54" 0; + setAttr ".maskWeight_55_Name" -type "string" "maskWeight_55"; + setAttr ".maskWeight_55_Type" -type "string" "float"; + setAttr -k on ".maskWeight_55" 0; + setAttr ".maskWeight_56_Name" -type "string" "maskWeight_56"; + setAttr ".maskWeight_56_Type" -type "string" "float"; + setAttr -k on ".maskWeight_56" 0; + setAttr ".maskWeight_57_Name" -type "string" "maskWeight_57"; + setAttr ".maskWeight_57_Type" -type "string" "float"; + setAttr -k on ".maskWeight_57" 0; + setAttr ".maskWeight_58_Name" -type "string" "maskWeight_58"; + setAttr ".maskWeight_58_Type" -type "string" "float"; + setAttr -k on ".maskWeight_58" 0; + setAttr ".maskWeight_59_Name" -type "string" "maskWeight_59"; + setAttr ".maskWeight_59_Type" -type "string" "float"; + setAttr -k on ".maskWeight_59" 0; + setAttr ".maskWeight_60_Name" -type "string" "maskWeight_60"; + setAttr ".maskWeight_60_Type" -type "string" "float"; + setAttr -k on ".maskWeight_60" 0; + setAttr ".maskWeight_61_Name" -type "string" "maskWeight_61"; + setAttr ".maskWeight_61_Type" -type "string" "float"; + setAttr -k on ".maskWeight_61" 0; + setAttr ".maskWeight_62_Name" -type "string" "maskWeight_62"; + setAttr ".maskWeight_62_Type" -type "string" "float"; + setAttr -k on ".maskWeight_62" 0; + setAttr ".maskWeight_63_Name" -type "string" "maskWeight_63"; + setAttr ".maskWeight_63_Type" -type "string" "float"; + setAttr -k on ".maskWeight_63" 0; + setAttr ".maskWeight_64_Name" -type "string" "maskWeight_64"; + setAttr ".maskWeight_64_Type" -type "string" "float"; + setAttr -k on ".maskWeight_64" 0; + setAttr ".maskWeight_65_Name" -type "string" "maskWeight_65"; + setAttr ".maskWeight_65_Type" -type "string" "float"; + setAttr -k on ".maskWeight_65" 0; + setAttr ".maskWeight_66_Name" -type "string" "maskWeight_66"; + setAttr ".maskWeight_66_Type" -type "string" "float"; + setAttr -k on ".maskWeight_66" 0; + setAttr ".maskWeight_67_Name" -type "string" "maskWeight_67"; + setAttr ".maskWeight_67_Type" -type "string" "float"; + setAttr -k on ".maskWeight_67" 0; + setAttr ".maskWeight_68_Name" -type "string" "maskWeight_68"; + setAttr ".maskWeight_68_Type" -type "string" "float"; + setAttr -k on ".maskWeight_68" 0; + setAttr ".maskWeight_69_Name" -type "string" "maskWeight_69"; + setAttr ".maskWeight_69_Type" -type "string" "float"; + setAttr -k on ".maskWeight_69" 0; + setAttr ".maskWeight_70_Name" -type "string" "maskWeight_70"; + setAttr ".maskWeight_70_Type" -type "string" "float"; + setAttr -k on ".maskWeight_70" 0; + setAttr ".maskWeight_71_Name" -type "string" "maskWeight_71"; + setAttr ".maskWeight_71_Type" -type "string" "float"; + setAttr -k on ".maskWeight_71" 0; + setAttr ".maskWeight_72_Name" -type "string" "maskWeight_72"; + setAttr ".maskWeight_72_Type" -type "string" "float"; + setAttr -k on ".maskWeight_72" 0; + setAttr ".maskWeight_73_Name" -type "string" "maskWeight_73"; + setAttr ".maskWeight_73_Type" -type "string" "float"; + setAttr -k on ".maskWeight_73" 0; + setAttr ".maskWeight_74_Name" -type "string" "maskWeight_74"; + setAttr ".maskWeight_74_Type" -type "string" "float"; + setAttr -k on ".maskWeight_74" 0; + setAttr ".maskWeight_75_Name" -type "string" "maskWeight_75"; + setAttr ".maskWeight_75_Type" -type "string" "float"; + setAttr -k on ".maskWeight_75" 0; + setAttr ".maskWeight_76_Name" -type "string" "maskWeight_76"; + setAttr ".maskWeight_76_Type" -type "string" "float"; + setAttr -k on ".maskWeight_76" 0; + setAttr ".maskWeight_77_Name" -type "string" "maskWeight_77"; + setAttr ".maskWeight_77_Type" -type "string" "float"; + setAttr -k on ".maskWeight_77" 0; + setAttr ".maskWeight_78_Name" -type "string" "maskWeight_78"; + setAttr ".maskWeight_78_Type" -type "string" "float"; + setAttr -k on ".maskWeight_78" 0; + setAttr ".maskWeight_79_Name" -type "string" "maskWeight_79"; + setAttr ".maskWeight_79_Type" -type "string" "float"; + setAttr -k on ".maskWeight_79" 0; + setAttr ".maskWeight_80_Name" -type "string" "maskWeight_80"; + setAttr ".maskWeight_80_Type" -type "string" "float"; + setAttr -k on ".maskWeight_80" 0; + setAttr ".maskWeight_81_Name" -type "string" "maskWeight_81"; + setAttr ".maskWeight_81_Type" -type "string" "float"; + setAttr -k on ".maskWeight_81" 0; +createNode shadingEngine -n "shader_head_shaderSG"; + rename -uid "7EF66A4A-4CF9-19EF-2CAE-43A66BD86450"; + setAttr ".ihi" 0; + setAttr ".ro" yes; +createNode materialInfo -n "materialInfo1"; + rename -uid "666E56BA-4056-42F6-D724-6A82CF0141C9"; +createNode dx11Shader -n "shader_teeth_shader"; + rename -uid "F3B6C2CC-43E7-F0F0-F0FB-DBA8CFF7413C"; + addAttr -s false -is true -ci true -k true -sn "te" -ln "techniqueEnum" -nn "Technique" + -ct "HW_shader_parameter" -min 0 -max 2 -en "TessellationOFF" -at "enum"; + addAttr -ci true -sn "Light_0_use_implicit_lighting" -ln "Light_0_use_implicit_lighting" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -s false -ci true -sn "Light_0_connected_light" -ln "Light_0_connected_light" + -ct "HW_shader_parameter" -at "message"; + addAttr -ci true -sn "Light_1_use_implicit_lighting" -ln "Light_1_use_implicit_lighting" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -s false -ci true -sn "Light_1_connected_light" -ln "Light_1_connected_light" + -ct "HW_shader_parameter" -at "message"; + addAttr -ci true -sn "Light_2_use_implicit_lighting" -ln "Light_2_use_implicit_lighting" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -s false -ci true -sn "Light_2_connected_light" -ln "Light_2_connected_light" + -ct "HW_shader_parameter" -at "message"; + addAttr -is true -ci true -h true -sn "SuperFilterTaps_Name" -ln "SuperFilterTaps_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SuperFilterTaps_Type" -ln "SuperFilterTaps_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SuperFilterTaps" -ln "SuperFilterTaps" -ct "HW_shader_parameter" + -at "float2" -nc 2; + addAttr -is true -ci true -sn "SuperFilterTapsX" -ln "SuperFilterTapsX" -ct "HW_shader_parameter" + -dv -0.84052002429962158 -smn 0 -smx 1 -at "float" -p "SuperFilterTaps"; + addAttr -is true -ci true -sn "SuperFilterTapsY" -ln "SuperFilterTapsY" -ct "HW_shader_parameter" + -dv -0.073954001069068909 -smn 0 -smx 1 -at "float" -p "SuperFilterTaps"; + addAttr -is true -ci true -h true -sn "shadowMapTexelSize_Name" -ln "shadowMapTexelSize_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowMapTexelSize_Type" -ln "shadowMapTexelSize_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowMapTexelSize" -ln "shadowMapTexelSize" + -ct "HW_shader_parameter" -dv 0.0019531298894435167 -smn 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "LinearSpaceLighting_Name" -ln "LinearSpaceLighting_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "LinearSpaceLighting_Type" -ln "LinearSpaceLighting_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "LinearSpaceLighting" -ln "LinearSpaceLighting" + -nn "Linear Space Lighting" -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "UseShadows_Name" -ln "UseShadows_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "UseShadows_Type" -ln "UseShadows_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "UseShadows" -ln "UseShadows" -nn "Shadows" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "shadowMultiplier_Name" -ln "shadowMultiplier_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowMultiplier_Type" -ln "shadowMultiplier_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "shadowMultiplier" -ln "shadowMultiplier" + -nn "Shadow Strength" -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "float"; + addAttr -is true -ci true -h true -sn "IsSwatchRender_Name" -ln "IsSwatchRender_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "IsSwatchRender_Type" -ln "IsSwatchRender_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "IsSwatchRender" -ln "IsSwatchRender" -ct "HW_shader_parameter" + -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "shadowDepthBias_Name" -ln "shadowDepthBias_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowDepthBias_Type" -ln "shadowDepthBias_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "shadowDepthBias" -ln "shadowDepthBias" -nn "Shadow Bias" + -ct "HW_shader_parameter" -dv 0.0099999997764825821 -min 0 -smx 10 -at "float"; + addAttr -is true -ci true -h true -sn "MayaFullScreenGamma_Name" -ln "MayaFullScreenGamma_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "MayaFullScreenGamma_Type" -ln "MayaFullScreenGamma_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "MayaFullScreenGamma" -ln "MayaFullScreenGamma" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "flipBackfaceNormals_Name" -ln "flipBackfaceNormals_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "flipBackfaceNormals_Type" -ln "flipBackfaceNormals_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "flipBackfaceNormals" -ln "flipBackfaceNormals" + -nn "Double Sided Lighting" -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "light0Enable_Name" -ln "light0Enable_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0Enable_Type" -ln "light0Enable_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light0Enable" -ln "light0Enable" -nn "Enable Light 0" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "light0Type_Name" -ln "light0Type_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light0Type_Type" -ln "light0Type_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light0Type" -ln "light0Type" -nn "Light 0 Type" + -ct "HW_shader_parameter" -dv 2 -min 0 -max 5 -smn 0 -smx 1 -en "None:Default:Spot:Point:Directional:Ambient" + -at "enum"; + addAttr -is true -ci true -h true -sn "light0Pos_Name" -ln "light0Pos_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light0Pos_Type" -ln "light0Pos_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light0Pos" -ln "light0Pos" -nn "Light 0 Position" + -ct "HW_shader_parameter" -at "matrix"; + addAttr -is true -ci true -h true -sn "light0Color_Name" -ln "light0Color_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0Color_Type" -ln "light0Color_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -k true -sn "light0Color" -ln "light0Color" -nn "Light 0 Color" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "light0ColorR" -ln "light0ColorR" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light0Color"; + addAttr -is true -ci true -sn "light0ColorG" -ln "light0ColorG" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light0Color"; + addAttr -is true -ci true -sn "light0ColorB" -ln "light0ColorB" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light0Color"; + addAttr -is true -ci true -h true -sn "light0Intensity_Name" -ln "light0Intensity_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0Intensity_Type" -ln "light0Intensity_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light0Intensity" -ln "light0Intensity" -nn "Light 0 Intensity" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -at "float"; + addAttr -is true -ci true -h true -sn "light0Dir_Name" -ln "light0Dir_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light0Dir_Type" -ln "light0Dir_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light0Dir" -ln "light0Dir" -nn "Light 0 Direction" + -ct "HW_shader_parameter" -at "matrix"; + addAttr -is true -ci true -h true -sn "light0ConeAngle_Name" -ln "light0ConeAngle_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0ConeAngle_Type" -ln "light0ConeAngle_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light0ConeAngle" -ln "light0ConeAngle" -nn "Light 0 Cone Angle" + -ct "HW_shader_parameter" -dv 0.46000000834465027 -min 0 -max 1.5707962512969971 + -at "float"; + addAttr -is true -ci true -h true -sn "light0FallOff_Name" -ln "light0FallOff_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0FallOff_Type" -ln "light0FallOff_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light0FallOff" -ln "light0FallOff" -nn "Light 0 Penumbra Angle" + -ct "HW_shader_parameter" -dv 0.69999998807907104 -min 0 -max 1.5707962512969971 + -at "float"; + addAttr -is true -ci true -h true -sn "light0AttenScale_Name" -ln "light0AttenScale_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0AttenScale_Type" -ln "light0AttenScale_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light0AttenScale" -ln "light0AttenScale" + -nn "Light 0 Decay" -ct "HW_shader_parameter" -min 0 -max 99999 -at "float"; + addAttr -is true -ci true -h true -sn "light0ShadowOn_Name" -ln "light0ShadowOn_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0ShadowOn_Type" -ln "light0ShadowOn_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0ShadowOn" -ln "light0ShadowOn" -nn "Light 0 Casts Shadow" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "light1Enable_Name" -ln "light1Enable_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1Enable_Type" -ln "light1Enable_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light1Enable" -ln "light1Enable" -nn "Enable Light 1" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "light1Type_Name" -ln "light1Type_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light1Type_Type" -ln "light1Type_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light1Type" -ln "light1Type" -nn "Light 1 Type" + -ct "HW_shader_parameter" -dv 2 -min 0 -max 5 -smn 0 -smx 1 -en "None:Default:Spot:Point:Directional:Ambient" + -at "enum"; + addAttr -is true -ci true -h true -sn "light1Pos_Name" -ln "light1Pos_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light1Pos_Type" -ln "light1Pos_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light1Pos" -ln "light1Pos" -nn "Light 1 Position" + -ct "HW_shader_parameter" -at "matrix"; + addAttr -is true -ci true -h true -sn "light1Color_Name" -ln "light1Color_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1Color_Type" -ln "light1Color_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -k true -sn "light1Color" -ln "light1Color" -nn "Light 1 Color" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "light1ColorR" -ln "light1ColorR" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light1Color"; + addAttr -is true -ci true -sn "light1ColorG" -ln "light1ColorG" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light1Color"; + addAttr -is true -ci true -sn "light1ColorB" -ln "light1ColorB" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light1Color"; + addAttr -is true -ci true -h true -sn "light1Intensity_Name" -ln "light1Intensity_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1Intensity_Type" -ln "light1Intensity_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light1Intensity" -ln "light1Intensity" -nn "Light 1 Intensity" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -at "float"; + addAttr -is true -ci true -h true -sn "light1Dir_Name" -ln "light1Dir_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light1Dir_Type" -ln "light1Dir_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light1Dir" -ln "light1Dir" -nn "Light 1 Direction" + -ct "HW_shader_parameter" -at "matrix"; + addAttr -is true -ci true -h true -sn "light1ConeAngle_Name" -ln "light1ConeAngle_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1ConeAngle_Type" -ln "light1ConeAngle_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light1ConeAngle" -ln "light1ConeAngle" -nn "Light 1 Cone Angle" + -ct "HW_shader_parameter" -min 0 -max 1.5707962512969971 -at "float"; + addAttr -is true -ci true -h true -sn "light1FallOff_Name" -ln "light1FallOff_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1FallOff_Type" -ln "light1FallOff_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light1FallOff" -ln "light1FallOff" -nn "Light 1 Penumbra Angle" + -ct "HW_shader_parameter" -min 0 -max 1.5707962512969971 -at "float"; + addAttr -is true -ci true -h true -sn "light1AttenScale_Name" -ln "light1AttenScale_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1AttenScale_Type" -ln "light1AttenScale_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light1AttenScale" -ln "light1AttenScale" + -nn "Light 1 Decay" -ct "HW_shader_parameter" -min 0 -max 99999 -at "float"; + addAttr -is true -ci true -h true -sn "light1ShadowOn_Name" -ln "light1ShadowOn_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1ShadowOn_Type" -ln "light1ShadowOn_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1ShadowOn" -ln "light1ShadowOn" -nn "Light 1 Casts Shadow" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "light2Enable_Name" -ln "light2Enable_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2Enable_Type" -ln "light2Enable_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light2Enable" -ln "light2Enable" -nn "Enable Light 2" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "light2Type_Name" -ln "light2Type_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light2Type_Type" -ln "light2Type_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light2Type" -ln "light2Type" -nn "Light 2 Type" + -ct "HW_shader_parameter" -dv 2 -min 0 -max 5 -smn 0 -smx 1 -en "None:Default:Spot:Point:Directional:Ambient" + -at "enum"; + addAttr -is true -ci true -h true -sn "light2Pos_Name" -ln "light2Pos_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light2Pos_Type" -ln "light2Pos_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light2Pos" -ln "light2Pos" -nn "Light 2 Position" + -ct "HW_shader_parameter" -at "matrix"; + addAttr -is true -ci true -h true -sn "light2Color_Name" -ln "light2Color_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2Color_Type" -ln "light2Color_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -k true -sn "light2Color" -ln "light2Color" -nn "Light 2 Color" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "light2ColorR" -ln "light2ColorR" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light2Color"; + addAttr -is true -ci true -sn "light2ColorG" -ln "light2ColorG" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light2Color"; + addAttr -is true -ci true -sn "light2ColorB" -ln "light2ColorB" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light2Color"; + addAttr -is true -ci true -h true -sn "light2Intensity_Name" -ln "light2Intensity_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2Intensity_Type" -ln "light2Intensity_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light2Intensity" -ln "light2Intensity" -nn "Light 2 Intensity" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -at "float"; + addAttr -is true -ci true -h true -sn "light2Dir_Name" -ln "light2Dir_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light2Dir_Type" -ln "light2Dir_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light2Dir" -ln "light2Dir" -nn "Light 2 Direction" + -ct "HW_shader_parameter" -at "matrix"; + addAttr -is true -ci true -h true -sn "light2ConeAngle_Name" -ln "light2ConeAngle_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2ConeAngle_Type" -ln "light2ConeAngle_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light2ConeAngle" -ln "light2ConeAngle" -nn "Light 2 Cone Angle" + -ct "HW_shader_parameter" -min 0 -max 1.5707962512969971 -at "float"; + addAttr -is true -ci true -h true -sn "light2FallOff_Name" -ln "light2FallOff_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2FallOff_Type" -ln "light2FallOff_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light2FallOff" -ln "light2FallOff" -nn "Light 2 Penumbra Angle" + -ct "HW_shader_parameter" -min 0 -max 1.5707962512969971 -at "float"; + addAttr -is true -ci true -h true -sn "light2AttenScale_Name" -ln "light2AttenScale_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2AttenScale_Type" -ln "light2AttenScale_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light2AttenScale" -ln "light2AttenScale" + -nn "Light 2 Decay" -ct "HW_shader_parameter" -min 0 -max 99999 -at "float"; + addAttr -is true -ci true -h true -sn "light2ShadowOn_Name" -ln "light2ShadowOn_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2ShadowOn_Type" -ln "light2ShadowOn_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2ShadowOn" -ln "light2ShadowOn" -nn "Light 2 Casts Shadow" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "UseAmbientOcclusionTexture_Name" -ln "UseAmbientOcclusionTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseAmbientOcclusionTexture_Type" -ln "UseAmbientOcclusionTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseAmbientOcclusionTexture" -ln "UseAmbientOcclusionTexture" + -nn "Use Occlusion Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "transpDepthTexture_Name" -ln "transpDepthTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "transpDepthTexture_Type" -ln "transpDepthTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -h true -sn "transpDepthTexture" -ln "transpDepthTexture" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "transpDepthTextureR" -ln "transpDepthTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "transpDepthTexture"; + addAttr -is true -ci true -sn "transpDepthTextureG" -ln "transpDepthTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "transpDepthTexture"; + addAttr -is true -ci true -sn "transpDepthTextureB" -ln "transpDepthTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "transpDepthTexture"; + addAttr -is true -ci true -h true -sn "opaqueDepthTexture_Name" -ln "opaqueDepthTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "opaqueDepthTexture_Type" -ln "opaqueDepthTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -h true -sn "opaqueDepthTexture" -ln "opaqueDepthTexture" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "opaqueDepthTextureR" -ln "opaqueDepthTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "opaqueDepthTexture"; + addAttr -is true -ci true -sn "opaqueDepthTextureG" -ln "opaqueDepthTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "opaqueDepthTexture"; + addAttr -is true -ci true -sn "opaqueDepthTextureB" -ln "opaqueDepthTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "opaqueDepthTexture"; + addAttr -is true -ci true -h true -sn "UseDiffuseTexture_Name" -ln "UseDiffuseTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseDiffuseTexture_Type" -ln "UseDiffuseTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseDiffuseTexture" -ln "UseDiffuseTexture" + -nn "Use Diffuse Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "UseDiffuseTextureAlpha_Name" -ln "UseDiffuseTextureAlpha_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseDiffuseTextureAlpha_Type" -ln "UseDiffuseTextureAlpha_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseDiffuseTextureAlpha" -ln "UseDiffuseTextureAlpha" + -nn "Use Diffuse Map Alpha" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "DiffuseTexture_Name" -ln "DiffuseTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DiffuseTexture_Type" -ln "DiffuseTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "DiffuseTexture" -ln "DiffuseTexture" -nn "Diffuse Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "DiffuseTextureR" -ln "DiffuseTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DiffuseTexture"; + addAttr -is true -ci true -sn "DiffuseTextureG" -ln "DiffuseTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DiffuseTexture"; + addAttr -is true -ci true -sn "DiffuseTextureB" -ln "DiffuseTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DiffuseTexture"; + addAttr -is true -ci true -h true -sn "DiffuseColor_Name" -ln "DiffuseColor_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DiffuseColor_Type" -ln "DiffuseColor_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -k true -sn "DiffuseColor" -ln "DiffuseColor" -nn "Diffuse Color" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "DiffuseColorR" -ln "DiffuseColorR" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "DiffuseColor"; + addAttr -is true -ci true -sn "DiffuseColorG" -ln "DiffuseColorG" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "DiffuseColor"; + addAttr -is true -ci true -sn "DiffuseColorB" -ln "DiffuseColorB" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "DiffuseColor"; + addAttr -is true -ci true -h true -sn "Opacity_Name" -ln "Opacity_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "Opacity_Type" -ln "Opacity_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "Opacity" -ln "Opacity" -nn "Opacity" -ct "HW_shader_parameter" + -dv 1 -min 0 -max 1 -at "float"; + addAttr -is true -ci true -h true -sn "UseOpacityMaskTexture_Name" -ln "UseOpacityMaskTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseOpacityMaskTexture_Type" -ln "UseOpacityMaskTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseOpacityMaskTexture" -ln "UseOpacityMaskTexture" + -nn "Opacity Mask" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "OpacityMaskTexture_Name" -ln "OpacityMaskTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "OpacityMaskTexture_Type" -ln "OpacityMaskTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "OpacityMaskTexture" -ln "OpacityMaskTexture" + -nn "Opacity Mask" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "OpacityMaskTextureR" -ln "OpacityMaskTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "OpacityMaskTexture"; + addAttr -is true -ci true -sn "OpacityMaskTextureG" -ln "OpacityMaskTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "OpacityMaskTexture"; + addAttr -is true -ci true -sn "OpacityMaskTextureB" -ln "OpacityMaskTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "OpacityMaskTexture"; + addAttr -is true -ci true -h true -sn "OpacityMaskBias_Name" -ln "OpacityMaskBias_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "OpacityMaskBias_Type" -ln "OpacityMaskBias_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "OpacityMaskBias" -ln "OpacityMaskBias" -nn "Opacity Mask Bias" + -ct "HW_shader_parameter" -dv 0.10000000149011612 -min 0 -max 1 -at "float"; + addAttr -is true -ci true -h true -sn "UseSpecularTexture_Name" -ln "UseSpecularTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseSpecularTexture_Type" -ln "UseSpecularTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseSpecularTexture" -ln "UseSpecularTexture" + -nn "Use Specular Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "SpecularTexture_Name" -ln "SpecularTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SpecularTexture_Type" -ln "SpecularTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "SpecularTexture" -ln "SpecularTexture" -nn "Specular Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "SpecularTextureR" -ln "SpecularTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "SpecularTexture"; + addAttr -is true -ci true -sn "SpecularTextureG" -ln "SpecularTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "SpecularTexture"; + addAttr -is true -ci true -sn "SpecularTextureB" -ln "SpecularTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "SpecularTexture"; + addAttr -is true -ci true -h true -sn "SpecularColor_Name" -ln "SpecularColor_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SpecularColor_Type" -ln "SpecularColor_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -k true -sn "SpecularColor" -ln "SpecularColor" -nn "Specular Color" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "SpecularColorR" -ln "SpecularColorR" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "SpecularColor"; + addAttr -is true -ci true -sn "SpecularColorG" -ln "SpecularColorG" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "SpecularColor"; + addAttr -is true -ci true -sn "SpecularColorB" -ln "SpecularColorB" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "SpecularColor"; + addAttr -is true -ci true -h true -sn "UseNormalTexture_Name" -ln "UseNormalTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseNormalTexture_Type" -ln "UseNormalTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseNormalTexture" -ln "UseNormalTexture" + -nn "Use Normal Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "NormalTexture_Name" -ln "NormalTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "NormalTexture_Type" -ln "NormalTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "NormalTexture" -ln "NormalTexture" -nn "Normal Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "NormalTextureR" -ln "NormalTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "NormalTexture"; + addAttr -is true -ci true -sn "NormalTextureG" -ln "NormalTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "NormalTexture"; + addAttr -is true -ci true -sn "NormalTextureB" -ln "NormalTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "NormalTexture"; + addAttr -is true -ci true -h true -sn "NormalHeight_Name" -ln "NormalHeight_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "NormalHeight_Type" -ln "NormalHeight_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "NormalHeight" -ln "NormalHeight" -nn "Normal Height" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -smx 5 -at "float"; + addAttr -is true -ci true -h true -sn "SupportNonUniformScale_Name" -ln "SupportNonUniformScale_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SupportNonUniformScale_Type" -ln "SupportNonUniformScale_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "SupportNonUniformScale" -ln "SupportNonUniformScale" + -nn "Support Non-Uniform Scale" -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "NormalCoordsysX_Name" -ln "NormalCoordsysX_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "NormalCoordsysX_Type" -ln "NormalCoordsysX_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "NormalCoordsysX" -ln "NormalCoordsysX" -nn "Normal X (Red)" + -ct "HW_shader_parameter" -min 0 -max 1 -smn 0 -smx 1 -en "Positive:Negative" -at "enum"; + addAttr -is true -ci true -h true -sn "NormalCoordsysY_Name" -ln "NormalCoordsysY_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "NormalCoordsysY_Type" -ln "NormalCoordsysY_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "NormalCoordsysY" -ln "NormalCoordsysY" -nn "Normal Y (Green)" + -ct "HW_shader_parameter" -min 0 -max 1 -smn 0 -smx 1 -en "Positive:Negative" -at "enum"; + addAttr -is true -ci true -h true -sn "DisplacementModel_Name" -ln "DisplacementModel_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DisplacementModel_Type" -ln "DisplacementModel_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DisplacementModel" -ln "DisplacementModel" + -nn "Displacement Model" -ct "HW_shader_parameter" -min 0 -max 1 -smn 0 -smx 1 -en + "Grayscale:Tangent Vector" -at "enum"; + addAttr -is true -ci true -h true -sn "UseDisplacementMap_Name" -ln "UseDisplacementMap_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseDisplacementMap_Type" -ln "UseDisplacementMap_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseDisplacementMap" -ln "UseDisplacementMap" + -nn "Displacement Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "DisplacementTexture_Name" -ln "DisplacementTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DisplacementTexture_Type" -ln "DisplacementTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "DisplacementTexture" -ln "DisplacementTexture" + -nn "Displacement Map" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "DisplacementTextureR" -ln "DisplacementTextureR" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "DisplacementTexture"; + addAttr -is true -ci true -sn "DisplacementTextureG" -ln "DisplacementTextureG" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "DisplacementTexture"; + addAttr -is true -ci true -sn "DisplacementTextureB" -ln "DisplacementTextureB" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "DisplacementTexture"; + addAttr -is true -ci true -h true -sn "VectorDisplacementCoordSys_Name" -ln "VectorDisplacementCoordSys_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "VectorDisplacementCoordSys_Type" -ln "VectorDisplacementCoordSys_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "VectorDisplacementCoordSys" -ln "VectorDisplacementCoordSys" + -nn "Displacement Coordsys" -ct "HW_shader_parameter" -min 0 -max 1 -smn 0 -smx 1 + -en "Mudbox (XZY):Maya (XYZ)" -at "enum"; + addAttr -is true -ci true -h true -sn "DisplacementHeight_Name" -ln "DisplacementHeight_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DisplacementHeight_Type" -ln "DisplacementHeight_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DisplacementHeight" -ln "DisplacementHeight" + -nn "Displacement Height" -ct "HW_shader_parameter" -dv 0.5 -min -99999 -max 99999 + -smn 0 -smx 10 -at "float"; + addAttr -is true -ci true -h true -sn "DisplacementOffset_Name" -ln "DisplacementOffset_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DisplacementOffset_Type" -ln "DisplacementOffset_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DisplacementOffset" -ln "DisplacementOffset" + -nn "Displacement Offset" -ct "HW_shader_parameter" -dv 0.5 -min -99999 -max 99999 + -smn -1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "DisplacementClippingBias_Name" -ln "DisplacementClippingBias_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DisplacementClippingBias_Type" -ln "DisplacementClippingBias_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DisplacementClippingBias" -ln "DisplacementClippingBias" + -nn "Displacement Clipping Bias" -ct "HW_shader_parameter" -dv 5 -min -99999 -max + 99999 -smn 0 -smx 99 -at "float"; + addAttr -is true -ci true -h true -sn "BBoxExtraScale_Name" -ln "BBoxExtraScale_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "BBoxExtraScale_Type" -ln "BBoxExtraScale_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "BBoxExtraScale" -ln "BBoxExtraScale" -nn "Bounding Box Extra Scale" + -ct "HW_shader_parameter" -dv 1 -min 1 -max 99999 -smx 10 -at "float"; + addAttr -is true -ci true -h true -sn "TessellationRange_Name" -ln "TessellationRange_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "TessellationRange_Type" -ln "TessellationRange_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "TessellationRange" -ln "TessellationRange" + -nn "Tessellation Range" -ct "HW_shader_parameter" -min 0 -max 99999 -smx 999 -at "float"; + addAttr -is true -ci true -h true -sn "TessellationMin_Name" -ln "TessellationMin_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "TessellationMin_Type" -ln "TessellationMin_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "TessellationMin" -ln "TessellationMin" -nn "Tessellation Minimum" + -ct "HW_shader_parameter" -dv 3 -min 1 -max 99999 -smx 10 -at "float"; + addAttr -is true -ci true -h true -sn "FlatTessellation_Name" -ln "FlatTessellation_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "FlatTessellation_Type" -ln "FlatTessellation_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "FlatTessellation" -ln "FlatTessellation" + -nn "Flat Tessellation" -ct "HW_shader_parameter" -min 0 -max 1 -at "float"; + addAttr -is true -ci true -h true -sn "UseTranslucency_Name" -ln "UseTranslucency_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseTranslucency_Type" -ln "UseTranslucency_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseTranslucency" -ln "UseTranslucency" -nn "Back Scattering" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "UseThicknessTexture_Name" -ln "UseThicknessTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseThicknessTexture_Type" -ln "UseThicknessTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseThicknessTexture" -ln "UseThicknessTexture" + -nn "Use Thickness Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "UseDiffuseIBLMap_Name" -ln "UseDiffuseIBLMap_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseDiffuseIBLMap_Type" -ln "UseDiffuseIBLMap_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseDiffuseIBLMap" -ln "UseDiffuseIBLMap" + -nn "Use Diffuse Cubemap" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "DiffuseIBLIntensity_Name" -ln "DiffuseIBLIntensity_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DiffuseIBLIntensity_Type" -ln "DiffuseIBLIntensity_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DiffuseIBLIntensity" -ln "DiffuseIBLIntensity" + -nn "Diffuse IBL Intensity" -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -smx + 2 -at "float"; + addAttr -is true -ci true -h true -sn "DiffuseTexcoord_Name" -ln "DiffuseTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DiffuseTexcoord_Type" -ln "DiffuseTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DiffuseTexcoord" -ln "DiffuseTexcoord" -nn "Diffuse Map UV" + -ct "HW_shader_parameter" -min 0 -max 2 -smn 0 -smx 1 -en "TexCoord0:TexCoord1:TexCoord2" + -at "enum"; + addAttr -is true -ci true -h true -sn "OpacityMaskTexcoord_Name" -ln "OpacityMaskTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "OpacityMaskTexcoord_Type" -ln "OpacityMaskTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "OpacityMaskTexcoord" -ln "OpacityMaskTexcoord" + -nn "Opacity Mask UV" -ct "HW_shader_parameter" -min 0 -max 2 -smn 0 -smx 1 -en "TexCoord0:TexCoord1:TexCoord2" + -at "enum"; + addAttr -is true -ci true -h true -sn "SpecularTexcoord_Name" -ln "SpecularTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SpecularTexcoord_Type" -ln "SpecularTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "SpecularTexcoord" -ln "SpecularTexcoord" + -nn "Specular Map UV" -ct "HW_shader_parameter" -min 0 -max 2 -smn 0 -smx 1 -en "TexCoord0:TexCoord1:TexCoord2" + -at "enum"; + addAttr -is true -ci true -h true -sn "NormalTexcoord_Name" -ln "NormalTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "NormalTexcoord_Type" -ln "NormalTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "NormalTexcoord" -ln "NormalTexcoord" -nn "Normal Map UV" + -ct "HW_shader_parameter" -min 0 -max 2 -smn 0 -smx 1 -en "TexCoord0:TexCoord1:TexCoord2" + -at "enum"; + addAttr -is true -ci true -h true -sn "DisplacementTexcoord_Name" -ln "DisplacementTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DisplacementTexcoord_Type" -ln "DisplacementTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DisplacementTexcoord" -ln "DisplacementTexcoord" + -nn "Displacement Map UV" -ct "HW_shader_parameter" -min 0 -max 2 -smn 0 -smx 1 -en + "TexCoord0:TexCoord1:TexCoord2" -at "enum"; + addAttr -is true -ci true -h true -sn "ThicknessTexcoord_Name" -ln "ThicknessTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "ThicknessTexcoord_Type" -ln "ThicknessTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "ThicknessTexcoord" -ln "ThicknessTexcoord" + -nn "Translucency Mask UV" -ct "HW_shader_parameter" -min 0 -max 2 -smn 0 -smx 1 + -en "TexCoord0:TexCoord1:TexCoord2" -at "enum"; + addAttr -is true -ci true -h true -sn "light0ShadowMap_Name" -ln "light0ShadowMap_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0ShadowMap_Type" -ln "light0ShadowMap_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -h true -sn "light0ShadowMap" -ln "light0ShadowMap" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "light0ShadowMapR" -ln "light0ShadowMapR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light0ShadowMap"; + addAttr -is true -ci true -sn "light0ShadowMapG" -ln "light0ShadowMapG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light0ShadowMap"; + addAttr -is true -ci true -sn "light0ShadowMapB" -ln "light0ShadowMapB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light0ShadowMap"; + addAttr -is true -ci true -h true -sn "light1ShadowMap_Name" -ln "light1ShadowMap_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1ShadowMap_Type" -ln "light1ShadowMap_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -h true -sn "light1ShadowMap" -ln "light1ShadowMap" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "light1ShadowMapR" -ln "light1ShadowMapR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light1ShadowMap"; + addAttr -is true -ci true -sn "light1ShadowMapG" -ln "light1ShadowMapG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light1ShadowMap"; + addAttr -is true -ci true -sn "light1ShadowMapB" -ln "light1ShadowMapB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light1ShadowMap"; + addAttr -is true -ci true -h true -sn "light2ShadowMap_Name" -ln "light2ShadowMap_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2ShadowMap_Type" -ln "light2ShadowMap_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -h true -sn "light2ShadowMap" -ln "light2ShadowMap" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "light2ShadowMapR" -ln "light2ShadowMapR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light2ShadowMap"; + addAttr -is true -ci true -sn "light2ShadowMapG" -ln "light2ShadowMapG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light2ShadowMap"; + addAttr -is true -ci true -sn "light2ShadowMapB" -ln "light2ShadowMapB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light2ShadowMap"; + addAttr -is true -ci true -h true -sn "screenSize_Name" -ln "screenSize_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "screenSize_Type" -ln "screenSize_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "screenSize" -ln "screenSize" -ct "HW_shader_parameter" + -at "float2" -nc 2; + addAttr -is true -ci true -sn "screenSizeX" -ln "screenSizeX" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "screenSize"; + addAttr -is true -ci true -sn "screenSizeY" -ln "screenSizeY" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "screenSize"; + addAttr -is true -ci true -h true -sn "SkyRotation_Name" -ln "SkyRotation_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SkyRotation_Type" -ln "SkyRotation_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "SkyRotation" -ln "SkyRotation" -nn "Sky Rotation" + -ct "HW_shader_parameter" -min 0 -max 99999 -smn 0 -smx 360 -at "float"; + addAttr -is true -ci true -h true -sn "DiffuseCubeIBL_Name" -ln "DiffuseCubeIBL_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DiffuseCubeIBL_Type" -ln "DiffuseCubeIBL_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "DiffuseCubeIBL" -ln "DiffuseCubeIBL" -nn "Diffuse Cubemap" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "DiffuseCubeIBLR" -ln "DiffuseCubeIBLR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DiffuseCubeIBL"; + addAttr -is true -ci true -sn "DiffuseCubeIBLG" -ln "DiffuseCubeIBLG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DiffuseCubeIBL"; + addAttr -is true -ci true -sn "DiffuseCubeIBLB" -ln "DiffuseCubeIBLB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DiffuseCubeIBL"; + addAttr -is true -ci true -h true -sn "UseSpecCubeIBL_Name" -ln "UseSpecCubeIBL_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseSpecCubeIBL_Type" -ln "UseSpecCubeIBL_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseSpecCubeIBL" -ln "UseSpecCubeIBL" -nn "Use Specular Cubemap" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "SpecularIBLIntensity_Name" -ln "SpecularIBLIntensity_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SpecularIBLIntensity_Type" -ln "SpecularIBLIntensity_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "SpecularIBLIntensity" -ln "SpecularIBLIntensity" + -nn "Specular IBL Intensity" -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -smx + 2 -at "float"; + addAttr -is true -ci true -h true -sn "SpecularCubeIBL_Name" -ln "SpecularCubeIBL_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SpecularCubeIBL_Type" -ln "SpecularCubeIBL_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "SpecularCubeIBL" -ln "SpecularCubeIBL" -nn "Specular Cubemap" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "SpecularCubeIBLR" -ln "SpecularCubeIBLR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "SpecularCubeIBL"; + addAttr -is true -ci true -sn "SpecularCubeIBLG" -ln "SpecularCubeIBLG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "SpecularCubeIBL"; + addAttr -is true -ci true -sn "SpecularCubeIBLB" -ln "SpecularCubeIBLB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "SpecularCubeIBL"; + addAttr -is true -ci true -h true -sn "LutTexture_Name" -ln "LutTexture_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "LutTexture_Type" -ln "LutTexture_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -uac -sn "LutTexture" -ln "LutTexture" -nn "SSS LUT Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "LutTextureR" -ln "LutTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "LutTexture"; + addAttr -is true -ci true -sn "LutTextureG" -ln "LutTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "LutTexture"; + addAttr -is true -ci true -sn "LutTextureB" -ln "LutTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "LutTexture"; + addAttr -is true -ci true -h true -sn "DitherTexture_Name" -ln "DitherTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DitherTexture_Type" -ln "DitherTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "DitherTexture" -ln "DitherTexture" -nn "SSS Dither Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "DitherTextureR" -ln "DitherTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DitherTexture"; + addAttr -is true -ci true -sn "DitherTextureG" -ln "DitherTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DitherTexture"; + addAttr -is true -ci true -sn "DitherTextureB" -ln "DitherTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DitherTexture"; + addAttr -is true -ci true -h true -sn "skinCoeffX_Name" -ln "skinCoeffX_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "skinCoeffX_Type" -ln "skinCoeffX_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "skinCoeffX" -ln "skinCoeffX" -nn "SSS Coeffient R" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "skinCoeffY_Name" -ln "skinCoeffY_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "skinCoeffY_Type" -ln "skinCoeffY_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "skinCoeffY" -ln "skinCoeffY" -nn "SSS Coeffient G" + -ct "HW_shader_parameter" -dv 0.5 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "skinCoeffZ_Name" -ln "skinCoeffZ_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "skinCoeffZ_Type" -ln "skinCoeffZ_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "skinCoeffZ" -ln "skinCoeffZ" -nn "SSS Coeffient B" + -ct "HW_shader_parameter" -dv 0.25 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "NormalBlurring_Name" -ln "NormalBlurring_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "NormalBlurring_Type" -ln "NormalBlurring_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "NormalBlurring" -ln "NormalBlurring" -nn "SSS Softness" + -ct "HW_shader_parameter" -dv 0.25 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "ScatteringRadiusTexture_Name" -ln "ScatteringRadiusTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "ScatteringRadiusTexture_Type" -ln "ScatteringRadiusTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "ScatteringRadiusTexture" -ln "ScatteringRadiusTexture" + -nn "SSS Radius Map" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "ScatteringRadiusTextureR" -ln "ScatteringRadiusTextureR" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "ScatteringRadiusTexture"; + addAttr -is true -ci true -sn "ScatteringRadiusTextureG" -ln "ScatteringRadiusTextureG" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "ScatteringRadiusTexture"; + addAttr -is true -ci true -sn "ScatteringRadiusTextureB" -ln "ScatteringRadiusTextureB" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "ScatteringRadiusTexture"; + addAttr -is true -ci true -h true -sn "UseScatteringRadiusTexture_Name" -ln "UseScatteringRadiusTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseScatteringRadiusTexture_Type" -ln "UseScatteringRadiusTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseScatteringRadiusTexture" -ln "UseScatteringRadiusTexture" + -nn "Use SSS Radius Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "skinScattering_Name" -ln "skinScattering_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "skinScattering_Type" -ln "skinScattering_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "skinScattering" -ln "skinScattering" -nn "SSS Radius" + -ct "HW_shader_parameter" -dv 0.25 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "shadowBlur_Name" -ln "shadowBlur_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "shadowBlur_Type" -ln "shadowBlur_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "shadowBlur" -ln "shadowBlur" -nn "SSS Shadow Blur" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "shadowDither_Name" -ln "shadowDither_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowDither_Type" -ln "shadowDither_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "shadowDither" -ln "shadowDither" -nn "SSS Shadow Dither" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "shadowScattering_Name" -ln "shadowScattering_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowScattering_Type" -ln "shadowScattering_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "shadowScattering" -ln "shadowScattering" + -nn "SSS Shadow Scattering" -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -smx 1 + -at "float"; + addAttr -is true -ci true -h true -sn "shadowSaturation_Name" -ln "shadowSaturation_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowSaturation_Type" -ln "shadowSaturation_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "shadowSaturation" -ln "shadowSaturation" + -nn "SSS Shadow Saturation" -ct "HW_shader_parameter" -dv 1 -min 0 -max 4 -smx 4 + -at "float"; + addAttr -is true -ci true -h true -sn "BackScatteringThicknessTexture_Name" -ln "BackScatteringThicknessTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "BackScatteringThicknessTexture_Type" -ln "BackScatteringThicknessTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "BackScatteringThicknessTexture" -ln "BackScatteringThicknessTexture" + -nn "Thickness Map" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "BackScatteringThicknessTextureR" -ln "BackScatteringThicknessTextureR" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "BackScatteringThicknessTexture"; + addAttr -is true -ci true -sn "BackScatteringThicknessTextureG" -ln "BackScatteringThicknessTextureG" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "BackScatteringThicknessTexture"; + addAttr -is true -ci true -sn "BackScatteringThicknessTextureB" -ln "BackScatteringThicknessTextureB" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "BackScatteringThicknessTexture"; + addAttr -is true -ci true -h true -sn "skinScatteringRoughness_Name" -ln "skinScatteringRoughness_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "skinScatteringRoughness_Type" -ln "skinScatteringRoughness_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "skinScatteringRoughness" -ln "skinScatteringRoughness" + -nn "Back Scattering Width" -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -smx 1 + -at "float"; + addAttr -is true -ci true -h true -sn "skinScatteringOuterColor_Name" -ln "skinScatteringOuterColor_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "skinScatteringOuterColor_Type" -ln "skinScatteringOuterColor_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -k true -sn "skinScatteringOuterColor" -ln "skinScatteringOuterColor" + -nn "Back Scattering Color" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "skinScatteringOuterColorR" -ln "skinScatteringOuterColorR" + -ct "HW_shader_parameter" -dv 0.25 -smn 0 -smx 1 -at "float" -p "skinScatteringOuterColor"; + addAttr -is true -ci true -sn "skinScatteringOuterColorG" -ln "skinScatteringOuterColorG" + -ct "HW_shader_parameter" -dv 0.05000000074505806 -smn 0 -smx 1 -at "float" -p "skinScatteringOuterColor"; + addAttr -is true -ci true -sn "skinScatteringOuterColorB" -ln "skinScatteringOuterColorB" + -ct "HW_shader_parameter" -dv 0.019999999552965164 -smn 0 -smx 1 -at "float" -p "skinScatteringOuterColor"; + addAttr -is true -ci true -h true -sn "skinScatteringAmount_Name" -ln "skinScatteringAmount_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "skinScatteringAmount_Type" -ln "skinScatteringAmount_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "skinScatteringAmount" -ln "skinScatteringAmount" + -nn "Back Scattering Amount" -ct "HW_shader_parameter" -dv 1 -min 0 -max 6 -smx 6 + -at "float"; + addAttr -is true -ci true -h true -sn "skinAmbientScatteringAmount_Name" -ln "skinAmbientScatteringAmount_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "skinAmbientScatteringAmount_Type" -ln "skinAmbientScatteringAmount_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "skinAmbientScatteringAmount" -ln "skinAmbientScatteringAmount" + -nn "Back Scattering Ambient Amount" -ct "HW_shader_parameter" -dv 1 -min 0 -max + 6 -smx 6 -at "float"; + addAttr -is true -ci true -h true -sn "UseSpecularTextureAlpha_Name" -ln "UseSpecularTextureAlpha_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseSpecularTextureAlpha_Type" -ln "UseSpecularTextureAlpha_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseSpecularTextureAlpha" -ln "UseSpecularTextureAlpha" + -nn "Use Roughness Map Alpha" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "LobeMix_Name" -ln "LobeMix_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "LobeMix_Type" -ln "LobeMix_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "LobeMix" -ln "LobeMix" -nn "Lobe Mixing" + -ct "HW_shader_parameter" -dv 0.75 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "Roughness_Name" -ln "Roughness_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "Roughness_Type" -ln "Roughness_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "Roughness" -ln "Roughness" -nn "Roughness multiplier" + -ct "HW_shader_parameter" -dv 0.20000000298023224 -min 0.0099999997764825821 -max + 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "OcclusionTexture_Name" -ln "OcclusionTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "OcclusionTexture_Type" -ln "OcclusionTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "OcclusionTexture" -ln "OcclusionTexture" -nn "Ambient Occlusion Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "OcclusionTextureR" -ln "OcclusionTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "OcclusionTexture"; + addAttr -is true -ci true -sn "OcclusionTextureG" -ln "OcclusionTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "OcclusionTexture"; + addAttr -is true -ci true -sn "OcclusionTextureB" -ln "OcclusionTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "OcclusionTexture"; + addAttr -is true -ci true -h true -sn "OcclusionAmount_Name" -ln "OcclusionAmount_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "OcclusionAmount_Type" -ln "OcclusionAmount_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "OcclusionAmount" -ln "OcclusionAmount" -nn "Occlusion Amount" + -ct "HW_shader_parameter" -dv 1 -min 0.0099999997764825821 -max 2 -smx 2 -at "float"; + addAttr -is true -ci true -h true -sn "UseCavityTexture_Name" -ln "UseCavityTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseCavityTexture_Type" -ln "UseCavityTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseCavityTexture" -ln "UseCavityTexture" + -nn "Use Cavity Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "CavityTexture_Name" -ln "CavityTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "CavityTexture_Type" -ln "CavityTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "CavityTexture" -ln "CavityTexture" -nn "Cavity Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "CavityTextureR" -ln "CavityTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "CavityTexture"; + addAttr -is true -ci true -sn "CavityTextureG" -ln "CavityTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "CavityTexture"; + addAttr -is true -ci true -sn "CavityTextureB" -ln "CavityTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "CavityTexture"; + addAttr -is true -ci true -h true -sn "CavityAmount_Name" -ln "CavityAmount_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "CavityAmount_Type" -ln "CavityAmount_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "CavityAmount" -ln "CavityAmount" -nn "Cavity Amount" + -ct "HW_shader_parameter" -dv 1 -min 0.0099999997764825821 -max 2 -smx 2 -at "float"; + addAttr -is true -ci true -h true -sn "UseMicroCavityTexture_Name" -ln "UseMicroCavityTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseMicroCavityTexture_Type" -ln "UseMicroCavityTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseMicroCavityTexture" -ln "UseMicroCavityTexture" + -nn "Use Micro Cavity Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "MicroCavityTexture_Name" -ln "MicroCavityTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "MicroCavityTexture_Type" -ln "MicroCavityTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "MicroCavityTexture" -ln "MicroCavityTexture" + -nn "Micro Cavity Map" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "MicroCavityTextureR" -ln "MicroCavityTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "MicroCavityTexture"; + addAttr -is true -ci true -sn "MicroCavityTextureG" -ln "MicroCavityTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "MicroCavityTexture"; + addAttr -is true -ci true -sn "MicroCavityTextureB" -ln "MicroCavityTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "MicroCavityTexture"; + addAttr -is true -ci true -h true -sn "MicroCavityAmount_Name" -ln "MicroCavityAmount_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "MicroCavityAmount_Type" -ln "MicroCavityAmount_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "MicroCavityAmount" -ln "MicroCavityAmount" + -nn "Micro Cavity Amount" -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -smx + 2 -at "float"; + addAttr -is true -ci true -h true -sn "UseMicroNormalTexture_Name" -ln "UseMicroNormalTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseMicroNormalTexture_Type" -ln "UseMicroNormalTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseMicroNormalTexture" -ln "UseMicroNormalTexture" + -nn "Use Micro Normal Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "MicroNormalTexture_Name" -ln "MicroNormalTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "MicroNormalTexture_Type" -ln "MicroNormalTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "MicroNormalTexture" -ln "MicroNormalTexture" + -nn "Micro Normal Map" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "MicroNormalTextureR" -ln "MicroNormalTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "MicroNormalTexture"; + addAttr -is true -ci true -sn "MicroNormalTextureG" -ln "MicroNormalTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "MicroNormalTexture"; + addAttr -is true -ci true -sn "MicroNormalTextureB" -ln "MicroNormalTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "MicroNormalTexture"; + addAttr -is true -ci true -h true -sn "MicroNormalHeight_Name" -ln "MicroNormalHeight_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "MicroNormalHeight_Type" -ln "MicroNormalHeight_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "MicroNormalHeight" -ln "MicroNormalHeight" + -nn "Micro Normal Height" -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -smx + 5 -at "float"; + addAttr -is true -ci true -h true -sn "MicroScale_Name" -ln "MicroScale_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "MicroScale_Type" -ln "MicroScale_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "MicroScale" -ln "MicroScale" -nn "Micro Scale" + -ct "HW_shader_parameter" -dv 32 -min 16 -max 99999 -smx 256 -at "float"; + addAttr -is true -ci true -h true -sn "UseBlendTexture_Name" -ln "UseBlendTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseBlendTexture_Type" -ln "UseBlendTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseBlendTexture" -ln "UseBlendTexture" -nn "Enable Wrinkle Mixing" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "OcclusionTexcoord_Name" -ln "OcclusionTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "OcclusionTexcoord_Type" -ln "OcclusionTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "OcclusionTexcoord" -ln "OcclusionTexcoord" + -nn "Ambient Occlusion Map UV" -ct "HW_shader_parameter" -dv 1 -min 0 -max 2 -smn + 0 -smx 1 -en "TexCoord0:TexCoord1:TexCoord2" -at "enum"; + addAttr -ci true -sn "Position" -ln "Position" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "Position_Name" -ln "Position_Name" -ct "HW_shader_parameter" + -dt "string" -p "Position"; + addAttr -is true -ci true -h true -sn "Position_Source" -ln "Position_Source" -ct "HW_shader_parameter" + -dt "string" -p "Position"; + addAttr -is true -ci true -sn "Position_DefaultTexture" -ln "Position_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "Position"; + addAttr -ci true -sn "TexCoord0" -ln "TexCoord0" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "TexCoord0_Name" -ln "TexCoord0_Name" -ct "HW_shader_parameter" + -dt "string" -p "TexCoord0"; + addAttr -is true -ci true -h true -sn "TexCoord0_Source" -ln "TexCoord0_Source" + -ct "HW_shader_parameter" -dt "string" -p "TexCoord0"; + addAttr -is true -ci true -sn "TexCoord0_DefaultTexture" -ln "TexCoord0_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "TexCoord0"; + addAttr -ci true -sn "TexCoord1" -ln "TexCoord1" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "TexCoord1_Name" -ln "TexCoord1_Name" -ct "HW_shader_parameter" + -dt "string" -p "TexCoord1"; + addAttr -is true -ci true -h true -sn "TexCoord1_Source" -ln "TexCoord1_Source" + -ct "HW_shader_parameter" -dt "string" -p "TexCoord1"; + addAttr -is true -ci true -sn "TexCoord1_DefaultTexture" -ln "TexCoord1_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "TexCoord1"; + addAttr -ci true -sn "TexCoord2" -ln "TexCoord2" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "TexCoord2_Name" -ln "TexCoord2_Name" -ct "HW_shader_parameter" + -dt "string" -p "TexCoord2"; + addAttr -is true -ci true -h true -sn "TexCoord2_Source" -ln "TexCoord2_Source" + -ct "HW_shader_parameter" -dt "string" -p "TexCoord2"; + addAttr -is true -ci true -sn "TexCoord2_DefaultTexture" -ln "TexCoord2_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "TexCoord2"; + addAttr -ci true -sn "Normal" -ln "Normal" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "Normal_Name" -ln "Normal_Name" -ct "HW_shader_parameter" + -dt "string" -p "Normal"; + addAttr -is true -ci true -h true -sn "Normal_Source" -ln "Normal_Source" -ct "HW_shader_parameter" + -dt "string" -p "Normal"; + addAttr -is true -ci true -sn "Normal_DefaultTexture" -ln "Normal_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "Normal"; + addAttr -ci true -sn "Binormal0" -ln "Binormal0" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "Binormal0_Name" -ln "Binormal0_Name" -ct "HW_shader_parameter" + -dt "string" -p "Binormal0"; + addAttr -is true -ci true -h true -sn "Binormal0_Source" -ln "Binormal0_Source" + -ct "HW_shader_parameter" -dt "string" -p "Binormal0"; + addAttr -is true -ci true -sn "Binormal0_DefaultTexture" -ln "Binormal0_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "Binormal0"; + addAttr -ci true -sn "Tangent0" -ln "Tangent0" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "Tangent0_Name" -ln "Tangent0_Name" -ct "HW_shader_parameter" + -dt "string" -p "Tangent0"; + addAttr -is true -ci true -h true -sn "Tangent0_Source" -ln "Tangent0_Source" -ct "HW_shader_parameter" + -dt "string" -p "Tangent0"; + addAttr -is true -ci true -sn "Tangent0_DefaultTexture" -ln "Tangent0_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "Tangent0"; + setAttr ".vpar" -type "stringArray" 7 "Position" "TexCoord0" "TexCoord1" "TexCoord2" "Normal" "Binormal0" "Tangent0" ; + setAttr ".upar" -type "stringArray" 124 "SuperFilterTaps" "shadowMapTexelSize" "IsSwatchRender" "screenSize" "MayaFullScreenGamma" "light0Enable" "light0Type" "light0Pos" "light0Color" "light0Intensity" "light0Dir" "light0ConeAngle" "light0FallOff" "light0AttenScale" "light0ShadowOn" "light1Enable" "light1Type" "light1Pos" "light1Color" "light1Intensity" "light1Dir" "light1ConeAngle" "light1FallOff" "light1AttenScale" "light1ShadowOn" "light2Enable" "light2Type" "light2Pos" "light2Color" "light2Intensity" "light2Dir" "light2ConeAngle" "light2FallOff" "light2AttenScale" "light2ShadowOn" "LinearSpaceLighting" "UseShadows" "shadowMultiplier" "shadowDepthBias" "flipBackfaceNormals" "SkyRotation" "UseDiffuseIBLMap" "DiffuseIBLIntensity" "DiffuseCubeIBL" "UseSpecCubeIBL" "SpecularIBLIntensity" "SpecularCubeIBL" "transpDepthTexture" "opaqueDepthTexture" "UseDiffuseTexture" "UseDiffuseTextureAlpha" "DiffuseTexture" "DiffuseColor" "LutTexture" "DitherTexture" "skinCoeffX" "skinCoeffY" "skinCoeffZ" "NormalBlurring" "UseScatteringRadiusTexture" "ScatteringRadiusTexture" "skinScattering" "shadowBlur" "shadowDither" "shadowScattering" "shadowSaturation" "UseTranslucency" "BackScatteringThicknessTexture" "UseThicknessTexture" "skinScatteringRoughness" "skinScatteringOuterColor" "skinScatteringAmount" "skinAmbientScatteringAmount" "UseSpecularTextureAlpha" "UseSpecularTexture" "SpecularTexture" "SpecularColor" "LobeMix" "Roughness" "UseAmbientOcclusionTexture" "OcclusionTexture" "OcclusionAmount" "UseCavityTexture" "CavityTexture" "CavityAmount" "UseNormalTexture" "NormalTexture" "NormalHeight" "SupportNonUniformScale" "NormalCoordsysX" "NormalCoordsysY" "UseMicroCavityTexture" "MicroCavityTexture" "MicroCavityAmount" "UseMicroNormalTexture" "MicroNormalTexture" "MicroNormalHeight" "MicroScale" "OpacityMaskTexture" "Opacity" "UseOpacityMaskTexture" "OpacityMaskBias" "DisplacementModel" "UseDisplacementMap" "DisplacementTexture" "VectorDisplacementCoordSys" "DisplacementHeight" "DisplacementOffset" "DisplacementClippingBias" "BBoxExtraScale" "TessellationRange" "TessellationMin" "FlatTessellation" "UseBlendTexture" "DiffuseTexcoord" "OcclusionTexcoord" "OpacityMaskTexcoord" "SpecularTexcoord" "NormalTexcoord" "DisplacementTexcoord" "ThicknessTexcoord" "light0ShadowMap" "light1ShadowMap" "light2ShadowMap" ; + setAttr ".s" -type "string" "$PROJECT_ROOT/Common/SourceAssets/shaders/dx11_shd_teeth.fx"; + setAttr ".t" -type "string" "TessellationOFF"; + setAttr ".SuperFilterTaps_Name" -type "string" "SuperFilterTaps"; + setAttr ".SuperFilterTaps_Type" -type "string" "float1x2"; + setAttr ".SuperFilterTaps" -type "float2" -0.84052002 -0.073954001 ; + setAttr ".shadowMapTexelSize_Name" -type "string" "shadowMapTexelSize"; + setAttr ".shadowMapTexelSize_Type" -type "string" "float"; + setAttr ".shadowMapTexelSize" 0.0019531298894435167; + setAttr ".LinearSpaceLighting_Name" -type "string" "LinearSpaceLighting"; + setAttr ".LinearSpaceLighting_Type" -type "string" "bool"; + setAttr -k on ".LinearSpaceLighting" yes; + setAttr ".UseShadows_Name" -type "string" "UseShadows"; + setAttr ".UseShadows_Type" -type "string" "bool"; + setAttr -k on ".UseShadows" yes; + setAttr ".shadowMultiplier_Name" -type "string" "shadowMultiplier"; + setAttr ".shadowMultiplier_Type" -type "string" "float"; + setAttr -k on ".shadowMultiplier" 1; + setAttr ".IsSwatchRender_Name" -type "string" "IsSwatchRender"; + setAttr ".IsSwatchRender_Type" -type "string" "bool"; + setAttr ".IsSwatchRender" no; + setAttr ".shadowDepthBias_Name" -type "string" "shadowDepthBias"; + setAttr ".shadowDepthBias_Type" -type "string" "float"; + setAttr -k on ".shadowDepthBias" 0.0099999997764825821; + setAttr ".MayaFullScreenGamma_Name" -type "string" "MayaFullScreenGamma"; + setAttr ".MayaFullScreenGamma_Type" -type "string" "bool"; + setAttr ".MayaFullScreenGamma" no; + setAttr ".flipBackfaceNormals_Name" -type "string" "flipBackfaceNormals"; + setAttr ".flipBackfaceNormals_Type" -type "string" "bool"; + setAttr -k on ".flipBackfaceNormals" yes; + setAttr ".light0Enable_Name" -type "string" "light0Enable"; + setAttr ".light0Enable_Type" -type "string" "bool"; + setAttr -l on -k on ".light0Enable" no; + setAttr ".light0Type_Name" -type "string" "light0Type"; + setAttr ".light0Type_Type" -type "string" "enum"; + setAttr -l on -k on ".light0Type" 2; + setAttr ".light0Pos_Name" -type "string" "light0Pos"; + setAttr ".light0Pos_Type" -type "string" "matrix1x3"; + setAttr -l on -k on ".light0Pos" -type "matrix" 1 0 0 0 0 1 0 0 0 0 1 0 100 100 100 1; + setAttr ".light0Color_Name" -type "string" "light0Color"; + setAttr ".light0Color_Type" -type "string" "color1x3"; + setAttr -l on -k on ".light0Color" -type "float3" 1 1 1 ; + setAttr -l on -k on ".light0Color"; + setAttr ".light0Intensity_Name" -type "string" "light0Intensity"; + setAttr ".light0Intensity_Type" -type "string" "float"; + setAttr -l on -k on ".light0Intensity" 1; + setAttr ".light0Dir_Name" -type "string" "light0Dir"; + setAttr ".light0Dir_Type" -type "string" "matrix1x3"; + setAttr -l on -k on ".light0Dir" -type "matrix" 1 0 0 0 0 1 0 0 -100 -100 -100 0 + 0 0 0 1; + setAttr ".light0ConeAngle_Name" -type "string" "light0ConeAngle"; + setAttr ".light0ConeAngle_Type" -type "string" "float"; + setAttr -l on -k on ".light0ConeAngle" 0.46000000834465027; + setAttr ".light0FallOff_Name" -type "string" "light0FallOff"; + setAttr ".light0FallOff_Type" -type "string" "float"; + setAttr -l on -k on ".light0FallOff" 0.69999998807907104; + setAttr ".light0AttenScale_Name" -type "string" "light0AttenScale"; + setAttr ".light0AttenScale_Type" -type "string" "float"; + setAttr -l on -k on ".light0AttenScale" 0; + setAttr ".light0ShadowOn_Name" -type "string" "light0ShadowOn"; + setAttr ".light0ShadowOn_Type" -type "string" "bool"; + setAttr ".light0ShadowOn" yes; + setAttr ".light1Enable_Name" -type "string" "light1Enable"; + setAttr ".light1Enable_Type" -type "string" "bool"; + setAttr -l on -k on ".light1Enable" no; + setAttr ".light1Type_Name" -type "string" "light1Type"; + setAttr ".light1Type_Type" -type "string" "enum"; + setAttr -l on -k on ".light1Type" 2; + setAttr ".light1Pos_Name" -type "string" "light1Pos"; + setAttr ".light1Pos_Type" -type "string" "matrix1x3"; + setAttr -l on -k on ".light1Pos" -type "matrix" 1 0 0 0 0 1 0 0 0 0 1 0 -100 100 100 1; + setAttr ".light1Color_Name" -type "string" "light1Color"; + setAttr ".light1Color_Type" -type "string" "color1x3"; + setAttr -l on -k on ".light1Color" -type "float3" 1 1 1 ; + setAttr -l on -k on ".light1Color"; + setAttr ".light1Intensity_Name" -type "string" "light1Intensity"; + setAttr ".light1Intensity_Type" -type "string" "float"; + setAttr -l on -k on ".light1Intensity" 1; + setAttr ".light1Dir_Name" -type "string" "light1Dir"; + setAttr ".light1Dir_Type" -type "string" "matrix1x3"; + setAttr -l on -k on ".light1Dir" -type "matrix" 1 0 0 0 0 1 0 0 -100 -100 -100 0 + 0 0 0 1; + setAttr ".light1ConeAngle_Name" -type "string" "light1ConeAngle"; + setAttr ".light1ConeAngle_Type" -type "string" "float"; + setAttr -l on -k on ".light1ConeAngle" 45; + setAttr ".light1FallOff_Name" -type "string" "light1FallOff"; + setAttr ".light1FallOff_Type" -type "string" "float"; + setAttr -l on -k on ".light1FallOff" 0; + setAttr ".light1AttenScale_Name" -type "string" "light1AttenScale"; + setAttr ".light1AttenScale_Type" -type "string" "float"; + setAttr -l on -k on ".light1AttenScale" 0; + setAttr ".light1ShadowOn_Name" -type "string" "light1ShadowOn"; + setAttr ".light1ShadowOn_Type" -type "string" "bool"; + setAttr ".light1ShadowOn" yes; + setAttr ".light2Enable_Name" -type "string" "light2Enable"; + setAttr ".light2Enable_Type" -type "string" "bool"; + setAttr -l on -k on ".light2Enable" no; + setAttr ".light2Type_Name" -type "string" "light2Type"; + setAttr ".light2Type_Type" -type "string" "enum"; + setAttr -l on -k on ".light2Type" 2; + setAttr ".light2Pos_Name" -type "string" "light2Pos"; + setAttr ".light2Pos_Type" -type "string" "matrix1x3"; + setAttr -l on -k on ".light2Pos" -type "matrix" 1 0 0 0 0 1 0 0 0 0 1 0 100 100 -100 1; + setAttr ".light2Color_Name" -type "string" "light2Color"; + setAttr ".light2Color_Type" -type "string" "color1x3"; + setAttr -l on -k on ".light2Color" -type "float3" 1 1 1 ; + setAttr -l on -k on ".light2Color"; + setAttr ".light2Intensity_Name" -type "string" "light2Intensity"; + setAttr ".light2Intensity_Type" -type "string" "float"; + setAttr -l on -k on ".light2Intensity" 1; + setAttr ".light2Dir_Name" -type "string" "light2Dir"; + setAttr ".light2Dir_Type" -type "string" "matrix1x3"; + setAttr -l on -k on ".light2Dir" -type "matrix" 1 0 0 0 0 1 0 0 -100 -100 -100 0 + 0 0 0 1; + setAttr ".light2ConeAngle_Name" -type "string" "light2ConeAngle"; + setAttr ".light2ConeAngle_Type" -type "string" "float"; + setAttr -l on -k on ".light2ConeAngle" 45; + setAttr ".light2FallOff_Name" -type "string" "light2FallOff"; + setAttr ".light2FallOff_Type" -type "string" "float"; + setAttr -l on -k on ".light2FallOff" 0; + setAttr ".light2AttenScale_Name" -type "string" "light2AttenScale"; + setAttr ".light2AttenScale_Type" -type "string" "float"; + setAttr -l on -k on ".light2AttenScale" 0; + setAttr ".light2ShadowOn_Name" -type "string" "light2ShadowOn"; + setAttr ".light2ShadowOn_Type" -type "string" "bool"; + setAttr ".light2ShadowOn" yes; + setAttr ".UseAmbientOcclusionTexture_Name" -type "string" "UseAmbientOcclusionTexture"; + setAttr ".UseAmbientOcclusionTexture_Type" -type "string" "bool"; + setAttr -k on ".UseAmbientOcclusionTexture" no; + setAttr ".transpDepthTexture_Name" -type "string" "transpDepthTexture"; + setAttr ".transpDepthTexture_Type" -type "string" "texture"; + setAttr ".transpDepthTexture" -type "float3" 0 0 0 ; + setAttr ".opaqueDepthTexture_Name" -type "string" "opaqueDepthTexture"; + setAttr ".opaqueDepthTexture_Type" -type "string" "texture"; + setAttr ".opaqueDepthTexture" -type "float3" 0 0 0 ; + setAttr ".UseDiffuseTexture_Name" -type "string" "UseDiffuseTexture"; + setAttr ".UseDiffuseTexture_Type" -type "string" "bool"; + setAttr -k on ".UseDiffuseTexture" yes; + setAttr ".UseDiffuseTextureAlpha_Name" -type "string" "UseDiffuseTextureAlpha"; + setAttr ".UseDiffuseTextureAlpha_Type" -type "string" "bool"; + setAttr -k on ".UseDiffuseTextureAlpha" no; + setAttr ".DiffuseTexture_Name" -type "string" "DiffuseTexture"; + setAttr ".DiffuseTexture_Type" -type "string" "texture"; + setAttr ".DiffuseTexture" -type "float3" 0 0 0 ; + setAttr ".DiffuseColor_Name" -type "string" "DiffuseColor"; + setAttr ".DiffuseColor_Type" -type "string" "color1x3"; + setAttr -k on ".DiffuseColor" -type "float3" 1 1 1 ; + setAttr ".Opacity_Name" -type "string" "Opacity"; + setAttr ".Opacity_Type" -type "string" "float"; + setAttr -k on ".Opacity" 1; + setAttr ".UseOpacityMaskTexture_Name" -type "string" "UseOpacityMaskTexture"; + setAttr ".UseOpacityMaskTexture_Type" -type "string" "bool"; + setAttr -k on ".UseOpacityMaskTexture" no; + setAttr ".OpacityMaskTexture_Name" -type "string" "OpacityMaskTexture"; + setAttr ".OpacityMaskTexture_Type" -type "string" "texture"; + setAttr ".OpacityMaskTexture" -type "float3" 0 0 0 ; + setAttr ".OpacityMaskBias_Name" -type "string" "OpacityMaskBias"; + setAttr ".OpacityMaskBias_Type" -type "string" "float"; + setAttr -k on ".OpacityMaskBias" 0.10000000149011612; + setAttr ".UseSpecularTexture_Name" -type "string" "UseSpecularTexture"; + setAttr ".UseSpecularTexture_Type" -type "string" "bool"; + setAttr -k on ".UseSpecularTexture" no; + setAttr ".SpecularTexture_Name" -type "string" "SpecularTexture"; + setAttr ".SpecularTexture_Type" -type "string" "texture"; + setAttr ".SpecularTexture" -type "float3" 0 0 0 ; + setAttr ".SpecularColor_Name" -type "string" "SpecularColor"; + setAttr ".SpecularColor_Type" -type "string" "color1x3"; + setAttr -k on ".SpecularColor" -type "float3" 0.31782946 0.31782946 0.31782946 ; + setAttr ".UseNormalTexture_Name" -type "string" "UseNormalTexture"; + setAttr ".UseNormalTexture_Type" -type "string" "bool"; + setAttr -k on ".UseNormalTexture" yes; + setAttr ".NormalTexture_Name" -type "string" "NormalTexture"; + setAttr ".NormalTexture_Type" -type "string" "texture"; + setAttr ".NormalTexture" -type "float3" 0 0 0 ; + setAttr ".NormalHeight_Name" -type "string" "NormalHeight"; + setAttr ".NormalHeight_Type" -type "string" "float"; + setAttr -k on ".NormalHeight" 1.1000000238418579; + setAttr ".SupportNonUniformScale_Name" -type "string" "SupportNonUniformScale"; + setAttr ".SupportNonUniformScale_Type" -type "string" "bool"; + setAttr -k on ".SupportNonUniformScale" yes; + setAttr ".NormalCoordsysX_Name" -type "string" "NormalCoordsysX"; + setAttr ".NormalCoordsysX_Type" -type "string" "enum"; + setAttr -k on ".NormalCoordsysX" 0; + setAttr ".NormalCoordsysY_Name" -type "string" "NormalCoordsysY"; + setAttr ".NormalCoordsysY_Type" -type "string" "enum"; + setAttr -k on ".NormalCoordsysY" 0; + setAttr ".DisplacementModel_Name" -type "string" "DisplacementModel"; + setAttr ".DisplacementModel_Type" -type "string" "enum"; + setAttr -k on ".DisplacementModel" 0; + setAttr ".UseDisplacementMap_Name" -type "string" "UseDisplacementMap"; + setAttr ".UseDisplacementMap_Type" -type "string" "bool"; + setAttr -k on ".UseDisplacementMap" no; + setAttr ".DisplacementTexture_Name" -type "string" "DisplacementTexture"; + setAttr ".DisplacementTexture_Type" -type "string" "texture"; + setAttr ".DisplacementTexture" -type "float3" 0 0 0 ; + setAttr ".VectorDisplacementCoordSys_Name" -type "string" "VectorDisplacementCoordSys"; + setAttr ".VectorDisplacementCoordSys_Type" -type "string" "enum"; + setAttr -k on ".VectorDisplacementCoordSys" 0; + setAttr ".DisplacementHeight_Name" -type "string" "DisplacementHeight"; + setAttr ".DisplacementHeight_Type" -type "string" "float"; + setAttr -k on ".DisplacementHeight" 0.5; + setAttr ".DisplacementOffset_Name" -type "string" "DisplacementOffset"; + setAttr ".DisplacementOffset_Type" -type "string" "float"; + setAttr -k on ".DisplacementOffset" 0.5; + setAttr ".DisplacementClippingBias_Name" -type "string" "DisplacementClippingBias"; + setAttr ".DisplacementClippingBias_Type" -type "string" "float"; + setAttr -k on ".DisplacementClippingBias" 5; + setAttr ".BBoxExtraScale_Name" -type "string" "BBoxExtraScale"; + setAttr ".BBoxExtraScale_Type" -type "string" "float"; + setAttr -k on ".BBoxExtraScale" 1; + setAttr ".TessellationRange_Name" -type "string" "TessellationRange"; + setAttr ".TessellationRange_Type" -type "string" "float"; + setAttr -k on ".TessellationRange" 0; + setAttr ".TessellationMin_Name" -type "string" "TessellationMin"; + setAttr ".TessellationMin_Type" -type "string" "float"; + setAttr -k on ".TessellationMin" 3; + setAttr ".FlatTessellation_Name" -type "string" "FlatTessellation"; + setAttr ".FlatTessellation_Type" -type "string" "float"; + setAttr -k on ".FlatTessellation" 0; + setAttr ".UseTranslucency_Name" -type "string" "UseTranslucency"; + setAttr ".UseTranslucency_Type" -type "string" "bool"; + setAttr -k on ".UseTranslucency" no; + setAttr ".UseThicknessTexture_Name" -type "string" "UseThicknessTexture"; + setAttr ".UseThicknessTexture_Type" -type "string" "bool"; + setAttr -k on ".UseThicknessTexture" no; + setAttr ".UseDiffuseIBLMap_Name" -type "string" "UseDiffuseIBLMap"; + setAttr ".UseDiffuseIBLMap_Type" -type "string" "bool"; + setAttr -k on ".UseDiffuseIBLMap" yes; + setAttr ".DiffuseIBLIntensity_Name" -type "string" "DiffuseIBLIntensity"; + setAttr ".DiffuseIBLIntensity_Type" -type "string" "float"; + setAttr -k on ".DiffuseIBLIntensity" 0.60000002384185791; + setAttr ".DiffuseTexcoord_Name" -type "string" "DiffuseTexcoord"; + setAttr ".DiffuseTexcoord_Type" -type "string" "enum"; + setAttr -k on ".DiffuseTexcoord" 0; + setAttr ".OpacityMaskTexcoord_Name" -type "string" "OpacityMaskTexcoord"; + setAttr ".OpacityMaskTexcoord_Type" -type "string" "enum"; + setAttr -k on ".OpacityMaskTexcoord" 0; + setAttr ".SpecularTexcoord_Name" -type "string" "SpecularTexcoord"; + setAttr ".SpecularTexcoord_Type" -type "string" "enum"; + setAttr -k on ".SpecularTexcoord" 0; + setAttr ".NormalTexcoord_Name" -type "string" "NormalTexcoord"; + setAttr ".NormalTexcoord_Type" -type "string" "enum"; + setAttr -k on ".NormalTexcoord" 0; + setAttr ".DisplacementTexcoord_Name" -type "string" "DisplacementTexcoord"; + setAttr ".DisplacementTexcoord_Type" -type "string" "enum"; + setAttr -k on ".DisplacementTexcoord" 0; + setAttr ".ThicknessTexcoord_Name" -type "string" "ThicknessTexcoord"; + setAttr ".ThicknessTexcoord_Type" -type "string" "enum"; + setAttr -k on ".ThicknessTexcoord" 0; + setAttr ".light0ShadowMap_Name" -type "string" "light0ShadowMap"; + setAttr ".light0ShadowMap_Type" -type "string" "texture"; + setAttr ".light0ShadowMap" -type "float3" 0 0 0 ; + setAttr ".light1ShadowMap_Name" -type "string" "light1ShadowMap"; + setAttr ".light1ShadowMap_Type" -type "string" "texture"; + setAttr ".light1ShadowMap" -type "float3" 0 0 0 ; + setAttr ".light2ShadowMap_Name" -type "string" "light2ShadowMap"; + setAttr ".light2ShadowMap_Type" -type "string" "texture"; + setAttr ".light2ShadowMap" -type "float3" 0 0 0 ; + setAttr ".screenSize_Name" -type "string" "screenSize"; + setAttr ".screenSize_Type" -type "string" "float1x2"; + setAttr ".screenSize" -type "float2" 0 0 ; + setAttr ".SkyRotation_Name" -type "string" "SkyRotation"; + setAttr ".SkyRotation_Type" -type "string" "float"; + setAttr -k on ".SkyRotation" 12.5; + setAttr ".DiffuseCubeIBL_Name" -type "string" "DiffuseCubeIBL"; + setAttr ".DiffuseCubeIBL_Type" -type "string" "texture"; + setAttr ".DiffuseCubeIBL" -type "float3" 0 0 0 ; + setAttr ".UseSpecCubeIBL_Name" -type "string" "UseSpecCubeIBL"; + setAttr ".UseSpecCubeIBL_Type" -type "string" "bool"; + setAttr -k on ".UseSpecCubeIBL" yes; + setAttr ".SpecularIBLIntensity_Name" -type "string" "SpecularIBLIntensity"; + setAttr ".SpecularIBLIntensity_Type" -type "string" "float"; + setAttr -k on ".SpecularIBLIntensity" 0.28499999642372131; + setAttr ".SpecularCubeIBL_Name" -type "string" "SpecularCubeIBL"; + setAttr ".SpecularCubeIBL_Type" -type "string" "texture"; + setAttr ".SpecularCubeIBL" -type "float3" 0 0 0 ; + setAttr ".LutTexture_Name" -type "string" "LutTexture"; + setAttr ".LutTexture_Type" -type "string" "texture"; + setAttr ".LutTexture" -type "float3" 0 0 0 ; + setAttr ".DitherTexture_Name" -type "string" "DitherTexture"; + setAttr ".DitherTexture_Type" -type "string" "texture"; + setAttr ".DitherTexture" -type "float3" 0 0 0 ; + setAttr ".skinCoeffX_Name" -type "string" "skinCoeffX"; + setAttr ".skinCoeffX_Type" -type "string" "float"; + setAttr -k on ".skinCoeffX" 0.82099997997283936; + setAttr ".skinCoeffY_Name" -type "string" "skinCoeffY"; + setAttr ".skinCoeffY_Type" -type "string" "float"; + setAttr -k on ".skinCoeffY" 0.33199998736381531; + setAttr ".skinCoeffZ_Name" -type "string" "skinCoeffZ"; + setAttr ".skinCoeffZ_Type" -type "string" "float"; + setAttr -k on ".skinCoeffZ" 0.030999999493360519; + setAttr ".NormalBlurring_Name" -type "string" "NormalBlurring"; + setAttr ".NormalBlurring_Type" -type "string" "float"; + setAttr -k on ".NormalBlurring" 1; + setAttr ".ScatteringRadiusTexture_Name" -type "string" "ScatteringRadiusTexture"; + setAttr ".ScatteringRadiusTexture_Type" -type "string" "texture"; + setAttr ".ScatteringRadiusTexture" -type "float3" 0 0 0 ; + setAttr ".UseScatteringRadiusTexture_Name" -type "string" "UseScatteringRadiusTexture"; + setAttr ".UseScatteringRadiusTexture_Type" -type "string" "bool"; + setAttr -k on ".UseScatteringRadiusTexture" no; + setAttr ".skinScattering_Name" -type "string" "skinScattering"; + setAttr ".skinScattering_Type" -type "string" "float"; + setAttr -k on ".skinScattering" 0.43700000643730164; + setAttr ".shadowBlur_Name" -type "string" "shadowBlur"; + setAttr ".shadowBlur_Type" -type "string" "float"; + setAttr -k on ".shadowBlur" 1; + setAttr ".shadowDither_Name" -type "string" "shadowDither"; + setAttr ".shadowDither_Type" -type "string" "float"; + setAttr -k on ".shadowDither" 0.086999997496604919; + setAttr ".shadowScattering_Name" -type "string" "shadowScattering"; + setAttr ".shadowScattering_Type" -type "string" "float"; + setAttr -k on ".shadowScattering" 1; + setAttr ".shadowSaturation_Name" -type "string" "shadowSaturation"; + setAttr ".shadowSaturation_Type" -type "string" "float"; + setAttr -k on ".shadowSaturation" 1.2740000486373901; + setAttr ".BackScatteringThicknessTexture_Name" -type "string" "BackScatteringThicknessTexture"; + setAttr ".BackScatteringThicknessTexture_Type" -type "string" "texture"; + setAttr ".BackScatteringThicknessTexture" -type "float3" 0 0 0 ; + setAttr ".skinScatteringRoughness_Name" -type "string" "skinScatteringRoughness"; + setAttr ".skinScatteringRoughness_Type" -type "string" "float"; + setAttr -k on ".skinScatteringRoughness" 1; + setAttr ".skinScatteringOuterColor_Name" -type "string" "skinScatteringOuterColor"; + setAttr ".skinScatteringOuterColor_Type" -type "string" "color1x3"; + setAttr -k on ".skinScatteringOuterColor" -type "float3" 0.39607844 0.039215688 + 0 ; + setAttr ".skinScatteringAmount_Name" -type "string" "skinScatteringAmount"; + setAttr ".skinScatteringAmount_Type" -type "string" "float"; + setAttr -k on ".skinScatteringAmount" 0.57599997520446777; + setAttr ".skinAmbientScatteringAmount_Name" -type "string" "skinAmbientScatteringAmount"; + setAttr ".skinAmbientScatteringAmount_Type" -type "string" "float"; + setAttr -k on ".skinAmbientScatteringAmount" 2.1779999732971191; + setAttr ".UseSpecularTextureAlpha_Name" -type "string" "UseSpecularTextureAlpha"; + setAttr ".UseSpecularTextureAlpha_Type" -type "string" "bool"; + setAttr -k on ".UseSpecularTextureAlpha" no; + setAttr ".LobeMix_Name" -type "string" "LobeMix"; + setAttr ".LobeMix_Type" -type "string" "float"; + setAttr -k on ".LobeMix" 0.6940000057220459; + setAttr ".Roughness_Name" -type "string" "Roughness"; + setAttr ".Roughness_Type" -type "string" "float"; + setAttr -k on ".Roughness" 0.17000000178813934; + setAttr ".OcclusionTexture_Name" -type "string" "OcclusionTexture"; + setAttr ".OcclusionTexture_Type" -type "string" "texture"; + setAttr ".OcclusionTexture" -type "float3" 0 0 0 ; + setAttr ".OcclusionAmount_Name" -type "string" "OcclusionAmount"; + setAttr ".OcclusionAmount_Type" -type "string" "float"; + setAttr -k on ".OcclusionAmount" 0.5; + setAttr ".UseCavityTexture_Name" -type "string" "UseCavityTexture"; + setAttr ".UseCavityTexture_Type" -type "string" "bool"; + setAttr -k on ".UseCavityTexture" no; + setAttr ".CavityTexture_Name" -type "string" "CavityTexture"; + setAttr ".CavityTexture_Type" -type "string" "texture"; + setAttr ".CavityTexture" -type "float3" 0 0 0 ; + setAttr ".CavityAmount_Name" -type "string" "CavityAmount"; + setAttr ".CavityAmount_Type" -type "string" "float"; + setAttr -k on ".CavityAmount" 1; + setAttr ".UseMicroCavityTexture_Name" -type "string" "UseMicroCavityTexture"; + setAttr ".UseMicroCavityTexture_Type" -type "string" "bool"; + setAttr -k on ".UseMicroCavityTexture" no; + setAttr ".MicroCavityTexture_Name" -type "string" "MicroCavityTexture"; + setAttr ".MicroCavityTexture_Type" -type "string" "texture"; + setAttr ".MicroCavityTexture" -type "float3" 0 0 0 ; + setAttr ".MicroCavityAmount_Name" -type "string" "MicroCavityAmount"; + setAttr ".MicroCavityAmount_Type" -type "string" "float"; + setAttr -k on ".MicroCavityAmount" 1; + setAttr ".UseMicroNormalTexture_Name" -type "string" "UseMicroNormalTexture"; + setAttr ".UseMicroNormalTexture_Type" -type "string" "bool"; + setAttr -k on ".UseMicroNormalTexture" no; + setAttr ".MicroNormalTexture_Name" -type "string" "MicroNormalTexture"; + setAttr ".MicroNormalTexture_Type" -type "string" "texture"; + setAttr ".MicroNormalTexture" -type "float3" 0 0 0 ; + setAttr ".MicroNormalHeight_Name" -type "string" "MicroNormalHeight"; + setAttr ".MicroNormalHeight_Type" -type "string" "float"; + setAttr -k on ".MicroNormalHeight" 1; + setAttr ".MicroScale_Name" -type "string" "MicroScale"; + setAttr ".MicroScale_Type" -type "string" "float"; + setAttr -k on ".MicroScale" 32; + setAttr ".UseBlendTexture_Name" -type "string" "UseBlendTexture"; + setAttr ".UseBlendTexture_Type" -type "string" "bool"; + setAttr -k on ".UseBlendTexture" no; + setAttr ".OcclusionTexcoord_Name" -type "string" "OcclusionTexcoord"; + setAttr ".OcclusionTexcoord_Type" -type "string" "enum"; + setAttr -k on ".OcclusionTexcoord" 1; + setAttr ".Position_Name" -type "string" "Position"; + setAttr ".Position_Source" -type "string" "position"; + setAttr ".TexCoord0_Name" -type "string" "TexCoord0"; + setAttr ".TexCoord0_Source" -type "string" "uv:map1"; + setAttr ".TexCoord0_DefaultTexture" -type "string" "DiffuseTexture"; + setAttr ".TexCoord1_Name" -type "string" "TexCoord1"; + setAttr ".TexCoord1_Source" -type "string" "uv:map2"; + setAttr ".TexCoord1_DefaultTexture" -type "string" "DiffuseTexture"; + setAttr ".TexCoord2_Name" -type "string" "TexCoord2"; + setAttr ".TexCoord2_Source" -type "string" "uv:map3"; + setAttr ".TexCoord2_DefaultTexture" -type "string" "DiffuseTexture"; + setAttr ".Normal_Name" -type "string" "Normal"; + setAttr ".Normal_Source" -type "string" "normal"; + setAttr ".Binormal0_Name" -type "string" "Binormal0"; + setAttr ".Binormal0_Source" -type "string" "binormal:map1"; + setAttr ".Tangent0_Name" -type "string" "Tangent0"; + setAttr ".Tangent0_Source" -type "string" "tangent:map1"; +createNode shadingEngine -n "shader_teeth_shaderSG"; + rename -uid "51CB22C4-43CA-9103-CBF3-74B388A08266"; + setAttr ".ihi" 0; + setAttr ".ro" yes; +createNode materialInfo -n "materialInfo2"; + rename -uid "7ED32CAE-4E47-D908-0D6D-4A99A34A453F"; +createNode blinn -n "shader_saliva_shader"; + rename -uid "F274448E-485C-FB4F-9DD5-6691A33FEB35"; + setAttr ".it" -type "float3" 0.89999998 0.89999998 0.89999998 ; + setAttr ".sc" -type "float3" 0.25 0.25 0.25 ; + setAttr ".ec" 0.20000000298023224; + setAttr ".sro" 0.20000000298023224; +createNode shadingEngine -n "shader_saliva_shaderSG"; + rename -uid "D419A0A6-42AE-5436-DC24-4AAE57B3B70A"; + setAttr ".ihi" 0; + setAttr ".ro" yes; +createNode materialInfo -n "materialInfo3"; + rename -uid "A49D0A41-46BA-F304-EFF0-88A96FA4DE2A"; +createNode dx11Shader -n "shader_eyeLeft_shader"; + rename -uid "7E8AE3FD-4462-FB83-0A75-24A62904BD10"; + addAttr -s false -is true -ci true -k true -sn "te" -ln "techniqueEnum" -nn "Technique" + -ct "HW_shader_parameter" -min 0 -max 2 -en "TessellationOFF" -at "enum"; + addAttr -ci true -sn "Light_0_use_implicit_lighting" -ln "Light_0_use_implicit_lighting" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -s false -ci true -sn "Light_0_connected_light" -ln "Light_0_connected_light" + -ct "HW_shader_parameter" -at "message"; + addAttr -ci true -sn "Light_1_use_implicit_lighting" -ln "Light_1_use_implicit_lighting" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -s false -ci true -sn "Light_1_connected_light" -ln "Light_1_connected_light" + -ct "HW_shader_parameter" -at "message"; + addAttr -ci true -sn "Light_2_use_implicit_lighting" -ln "Light_2_use_implicit_lighting" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -s false -ci true -sn "Light_2_connected_light" -ln "Light_2_connected_light" + -ct "HW_shader_parameter" -at "message"; + addAttr -is true -ci true -h true -sn "SuperFilterTaps_Name" -ln "SuperFilterTaps_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SuperFilterTaps_Type" -ln "SuperFilterTaps_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SuperFilterTaps" -ln "SuperFilterTaps" -ct "HW_shader_parameter" + -at "float2" -nc 2; + addAttr -is true -ci true -sn "SuperFilterTapsX" -ln "SuperFilterTapsX" -ct "HW_shader_parameter" + -dv -0.84052002429962158 -smn 0 -smx 1 -at "float" -p "SuperFilterTaps"; + addAttr -is true -ci true -sn "SuperFilterTapsY" -ln "SuperFilterTapsY" -ct "HW_shader_parameter" + -dv -0.073954001069068909 -smn 0 -smx 1 -at "float" -p "SuperFilterTaps"; + addAttr -is true -ci true -h true -sn "shadowMapTexelSize_Name" -ln "shadowMapTexelSize_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowMapTexelSize_Type" -ln "shadowMapTexelSize_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowMapTexelSize" -ln "shadowMapTexelSize" + -ct "HW_shader_parameter" -dv 0.0019531298894435167 -smn 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "LinearSpaceLighting_Name" -ln "LinearSpaceLighting_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "LinearSpaceLighting_Type" -ln "LinearSpaceLighting_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "LinearSpaceLighting" -ln "LinearSpaceLighting" + -nn "Linear Space Lighting" -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "UseShadows_Name" -ln "UseShadows_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "UseShadows_Type" -ln "UseShadows_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "UseShadows" -ln "UseShadows" -nn "Shadows" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "shadowMultiplier_Name" -ln "shadowMultiplier_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowMultiplier_Type" -ln "shadowMultiplier_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "shadowMultiplier" -ln "shadowMultiplier" + -nn "Shadow Strength" -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "float"; + addAttr -is true -ci true -h true -sn "IsSwatchRender_Name" -ln "IsSwatchRender_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "IsSwatchRender_Type" -ln "IsSwatchRender_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "IsSwatchRender" -ln "IsSwatchRender" -ct "HW_shader_parameter" + -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "shadowDepthBias_Name" -ln "shadowDepthBias_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowDepthBias_Type" -ln "shadowDepthBias_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "shadowDepthBias" -ln "shadowDepthBias" -nn "Shadow Bias" + -ct "HW_shader_parameter" -dv 0.0099999997764825821 -min 0 -smx 10 -at "float"; + addAttr -is true -ci true -h true -sn "MayaFullScreenGamma_Name" -ln "MayaFullScreenGamma_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "MayaFullScreenGamma_Type" -ln "MayaFullScreenGamma_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "MayaFullScreenGamma" -ln "MayaFullScreenGamma" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "flipBackfaceNormals_Name" -ln "flipBackfaceNormals_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "flipBackfaceNormals_Type" -ln "flipBackfaceNormals_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "flipBackfaceNormals" -ln "flipBackfaceNormals" + -nn "Double Sided Lighting" -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "light0Enable_Name" -ln "light0Enable_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0Enable_Type" -ln "light0Enable_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light0Enable" -ln "light0Enable" -nn "Enable Light 0" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "light0Type_Name" -ln "light0Type_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light0Type_Type" -ln "light0Type_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light0Type" -ln "light0Type" -nn "Light 0 Type" + -ct "HW_shader_parameter" -dv 2 -min 0 -max 5 -smn 0 -smx 1 -en "None:Default:Spot:Point:Directional:Ambient" + -at "enum"; + addAttr -is true -ci true -h true -sn "light0Pos_Name" -ln "light0Pos_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light0Pos_Type" -ln "light0Pos_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light0Pos" -ln "light0Pos" -nn "Light 0 Position" + -ct "HW_shader_parameter" -at "matrix"; + addAttr -is true -ci true -h true -sn "light0Color_Name" -ln "light0Color_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0Color_Type" -ln "light0Color_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -k true -sn "light0Color" -ln "light0Color" -nn "Light 0 Color" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "light0ColorR" -ln "light0ColorR" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light0Color"; + addAttr -is true -ci true -sn "light0ColorG" -ln "light0ColorG" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light0Color"; + addAttr -is true -ci true -sn "light0ColorB" -ln "light0ColorB" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light0Color"; + addAttr -is true -ci true -h true -sn "light0Intensity_Name" -ln "light0Intensity_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0Intensity_Type" -ln "light0Intensity_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light0Intensity" -ln "light0Intensity" -nn "Light 0 Intensity" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -at "float"; + addAttr -is true -ci true -h true -sn "light0Dir_Name" -ln "light0Dir_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light0Dir_Type" -ln "light0Dir_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light0Dir" -ln "light0Dir" -nn "Light 0 Direction" + -ct "HW_shader_parameter" -at "matrix"; + addAttr -is true -ci true -h true -sn "light0ConeAngle_Name" -ln "light0ConeAngle_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0ConeAngle_Type" -ln "light0ConeAngle_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light0ConeAngle" -ln "light0ConeAngle" -nn "Light 0 Cone Angle" + -ct "HW_shader_parameter" -dv 0.46000000834465027 -min 0 -max 1.5707962512969971 + -at "float"; + addAttr -is true -ci true -h true -sn "light0FallOff_Name" -ln "light0FallOff_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0FallOff_Type" -ln "light0FallOff_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light0FallOff" -ln "light0FallOff" -nn "Light 0 Penumbra Angle" + -ct "HW_shader_parameter" -dv 0.69999998807907104 -min 0 -max 1.5707962512969971 + -at "float"; + addAttr -is true -ci true -h true -sn "light0AttenScale_Name" -ln "light0AttenScale_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0AttenScale_Type" -ln "light0AttenScale_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light0AttenScale" -ln "light0AttenScale" + -nn "Light 0 Decay" -ct "HW_shader_parameter" -min 0 -max 99999 -at "float"; + addAttr -is true -ci true -h true -sn "light0ShadowOn_Name" -ln "light0ShadowOn_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0ShadowOn_Type" -ln "light0ShadowOn_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0ShadowOn" -ln "light0ShadowOn" -nn "Light 0 Casts Shadow" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "light1Enable_Name" -ln "light1Enable_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1Enable_Type" -ln "light1Enable_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light1Enable" -ln "light1Enable" -nn "Enable Light 1" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "light1Type_Name" -ln "light1Type_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light1Type_Type" -ln "light1Type_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light1Type" -ln "light1Type" -nn "Light 1 Type" + -ct "HW_shader_parameter" -dv 2 -min 0 -max 5 -smn 0 -smx 1 -en "None:Default:Spot:Point:Directional:Ambient" + -at "enum"; + addAttr -is true -ci true -h true -sn "light1Pos_Name" -ln "light1Pos_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light1Pos_Type" -ln "light1Pos_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light1Pos" -ln "light1Pos" -nn "Light 1 Position" + -ct "HW_shader_parameter" -at "matrix"; + addAttr -is true -ci true -h true -sn "light1Color_Name" -ln "light1Color_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1Color_Type" -ln "light1Color_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -k true -sn "light1Color" -ln "light1Color" -nn "Light 1 Color" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "light1ColorR" -ln "light1ColorR" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light1Color"; + addAttr -is true -ci true -sn "light1ColorG" -ln "light1ColorG" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light1Color"; + addAttr -is true -ci true -sn "light1ColorB" -ln "light1ColorB" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light1Color"; + addAttr -is true -ci true -h true -sn "light1Intensity_Name" -ln "light1Intensity_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1Intensity_Type" -ln "light1Intensity_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light1Intensity" -ln "light1Intensity" -nn "Light 1 Intensity" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -at "float"; + addAttr -is true -ci true -h true -sn "light1Dir_Name" -ln "light1Dir_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light1Dir_Type" -ln "light1Dir_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light1Dir" -ln "light1Dir" -nn "Light 1 Direction" + -ct "HW_shader_parameter" -at "matrix"; + addAttr -is true -ci true -h true -sn "light1ConeAngle_Name" -ln "light1ConeAngle_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1ConeAngle_Type" -ln "light1ConeAngle_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light1ConeAngle" -ln "light1ConeAngle" -nn "Light 1 Cone Angle" + -ct "HW_shader_parameter" -min 0 -max 1.5707962512969971 -at "float"; + addAttr -is true -ci true -h true -sn "light1FallOff_Name" -ln "light1FallOff_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1FallOff_Type" -ln "light1FallOff_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light1FallOff" -ln "light1FallOff" -nn "Light 1 Penumbra Angle" + -ct "HW_shader_parameter" -min 0 -max 1.5707962512969971 -at "float"; + addAttr -is true -ci true -h true -sn "light1AttenScale_Name" -ln "light1AttenScale_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1AttenScale_Type" -ln "light1AttenScale_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light1AttenScale" -ln "light1AttenScale" + -nn "Light 1 Decay" -ct "HW_shader_parameter" -min 0 -max 99999 -at "float"; + addAttr -is true -ci true -h true -sn "light1ShadowOn_Name" -ln "light1ShadowOn_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1ShadowOn_Type" -ln "light1ShadowOn_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1ShadowOn" -ln "light1ShadowOn" -nn "Light 1 Casts Shadow" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "light2Enable_Name" -ln "light2Enable_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2Enable_Type" -ln "light2Enable_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light2Enable" -ln "light2Enable" -nn "Enable Light 2" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "light2Type_Name" -ln "light2Type_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light2Type_Type" -ln "light2Type_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light2Type" -ln "light2Type" -nn "Light 2 Type" + -ct "HW_shader_parameter" -dv 2 -min 0 -max 5 -smn 0 -smx 1 -en "None:Default:Spot:Point:Directional:Ambient" + -at "enum"; + addAttr -is true -ci true -h true -sn "light2Pos_Name" -ln "light2Pos_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light2Pos_Type" -ln "light2Pos_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light2Pos" -ln "light2Pos" -nn "Light 2 Position" + -ct "HW_shader_parameter" -at "matrix"; + addAttr -is true -ci true -h true -sn "light2Color_Name" -ln "light2Color_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2Color_Type" -ln "light2Color_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -k true -sn "light2Color" -ln "light2Color" -nn "Light 2 Color" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "light2ColorR" -ln "light2ColorR" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light2Color"; + addAttr -is true -ci true -sn "light2ColorG" -ln "light2ColorG" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light2Color"; + addAttr -is true -ci true -sn "light2ColorB" -ln "light2ColorB" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light2Color"; + addAttr -is true -ci true -h true -sn "light2Intensity_Name" -ln "light2Intensity_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2Intensity_Type" -ln "light2Intensity_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light2Intensity" -ln "light2Intensity" -nn "Light 2 Intensity" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -at "float"; + addAttr -is true -ci true -h true -sn "light2Dir_Name" -ln "light2Dir_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light2Dir_Type" -ln "light2Dir_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light2Dir" -ln "light2Dir" -nn "Light 2 Direction" + -ct "HW_shader_parameter" -at "matrix"; + addAttr -is true -ci true -h true -sn "light2ConeAngle_Name" -ln "light2ConeAngle_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2ConeAngle_Type" -ln "light2ConeAngle_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light2ConeAngle" -ln "light2ConeAngle" -nn "Light 2 Cone Angle" + -ct "HW_shader_parameter" -min 0 -max 1.5707962512969971 -at "float"; + addAttr -is true -ci true -h true -sn "light2FallOff_Name" -ln "light2FallOff_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2FallOff_Type" -ln "light2FallOff_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light2FallOff" -ln "light2FallOff" -nn "Light 2 Penumbra Angle" + -ct "HW_shader_parameter" -min 0 -max 1.5707962512969971 -at "float"; + addAttr -is true -ci true -h true -sn "light2AttenScale_Name" -ln "light2AttenScale_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2AttenScale_Type" -ln "light2AttenScale_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light2AttenScale" -ln "light2AttenScale" + -nn "Light 2 Decay" -ct "HW_shader_parameter" -min 0 -max 99999 -at "float"; + addAttr -is true -ci true -h true -sn "light2ShadowOn_Name" -ln "light2ShadowOn_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2ShadowOn_Type" -ln "light2ShadowOn_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2ShadowOn" -ln "light2ShadowOn" -nn "Light 2 Casts Shadow" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "UseAmbientOcclusionTexture_Name" -ln "UseAmbientOcclusionTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseAmbientOcclusionTexture_Type" -ln "UseAmbientOcclusionTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseAmbientOcclusionTexture" -ln "UseAmbientOcclusionTexture" + -nn "Use Occlusion Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "transpDepthTexture_Name" -ln "transpDepthTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "transpDepthTexture_Type" -ln "transpDepthTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -h true -sn "transpDepthTexture" -ln "transpDepthTexture" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "transpDepthTextureR" -ln "transpDepthTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "transpDepthTexture"; + addAttr -is true -ci true -sn "transpDepthTextureG" -ln "transpDepthTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "transpDepthTexture"; + addAttr -is true -ci true -sn "transpDepthTextureB" -ln "transpDepthTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "transpDepthTexture"; + addAttr -is true -ci true -h true -sn "opaqueDepthTexture_Name" -ln "opaqueDepthTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "opaqueDepthTexture_Type" -ln "opaqueDepthTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -h true -sn "opaqueDepthTexture" -ln "opaqueDepthTexture" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "opaqueDepthTextureR" -ln "opaqueDepthTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "opaqueDepthTexture"; + addAttr -is true -ci true -sn "opaqueDepthTextureG" -ln "opaqueDepthTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "opaqueDepthTexture"; + addAttr -is true -ci true -sn "opaqueDepthTextureB" -ln "opaqueDepthTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "opaqueDepthTexture"; + addAttr -is true -ci true -h true -sn "UseDiffuseTexture_Name" -ln "UseDiffuseTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseDiffuseTexture_Type" -ln "UseDiffuseTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseDiffuseTexture" -ln "UseDiffuseTexture" + -nn "Use Diffuse Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "UseDiffuseTextureAlpha_Name" -ln "UseDiffuseTextureAlpha_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseDiffuseTextureAlpha_Type" -ln "UseDiffuseTextureAlpha_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseDiffuseTextureAlpha" -ln "UseDiffuseTextureAlpha" + -nn "Use Diffuse Map Alpha" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "DiffuseTexture_Name" -ln "DiffuseTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DiffuseTexture_Type" -ln "DiffuseTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "DiffuseTexture" -ln "DiffuseTexture" -nn "Diffuse Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "DiffuseTextureR" -ln "DiffuseTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DiffuseTexture"; + addAttr -is true -ci true -sn "DiffuseTextureG" -ln "DiffuseTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DiffuseTexture"; + addAttr -is true -ci true -sn "DiffuseTextureB" -ln "DiffuseTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DiffuseTexture"; + addAttr -is true -ci true -h true -sn "DiffuseColor_Name" -ln "DiffuseColor_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DiffuseColor_Type" -ln "DiffuseColor_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -k true -sn "DiffuseColor" -ln "DiffuseColor" -nn "Diffuse Color" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "DiffuseColorR" -ln "DiffuseColorR" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "DiffuseColor"; + addAttr -is true -ci true -sn "DiffuseColorG" -ln "DiffuseColorG" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "DiffuseColor"; + addAttr -is true -ci true -sn "DiffuseColorB" -ln "DiffuseColorB" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "DiffuseColor"; + addAttr -is true -ci true -h true -sn "Opacity_Name" -ln "Opacity_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "Opacity_Type" -ln "Opacity_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "Opacity" -ln "Opacity" -nn "Opacity" -ct "HW_shader_parameter" + -dv 1 -min 0 -max 1 -at "float"; + addAttr -is true -ci true -h true -sn "UseOpacityMaskTexture_Name" -ln "UseOpacityMaskTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseOpacityMaskTexture_Type" -ln "UseOpacityMaskTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseOpacityMaskTexture" -ln "UseOpacityMaskTexture" + -nn "Opacity Mask" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "OpacityMaskTexture_Name" -ln "OpacityMaskTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "OpacityMaskTexture_Type" -ln "OpacityMaskTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "OpacityMaskTexture" -ln "OpacityMaskTexture" + -nn "Opacity Mask" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "OpacityMaskTextureR" -ln "OpacityMaskTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "OpacityMaskTexture"; + addAttr -is true -ci true -sn "OpacityMaskTextureG" -ln "OpacityMaskTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "OpacityMaskTexture"; + addAttr -is true -ci true -sn "OpacityMaskTextureB" -ln "OpacityMaskTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "OpacityMaskTexture"; + addAttr -is true -ci true -h true -sn "OpacityMaskBias_Name" -ln "OpacityMaskBias_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "OpacityMaskBias_Type" -ln "OpacityMaskBias_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "OpacityMaskBias" -ln "OpacityMaskBias" -nn "Opacity Mask Bias" + -ct "HW_shader_parameter" -dv 0.10000000149011612 -min 0 -max 1 -at "float"; + addAttr -is true -ci true -h true -sn "UseSpecularTexture_Name" -ln "UseSpecularTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseSpecularTexture_Type" -ln "UseSpecularTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseSpecularTexture" -ln "UseSpecularTexture" + -nn "Use Specular Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "SpecularTexture_Name" -ln "SpecularTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SpecularTexture_Type" -ln "SpecularTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "SpecularTexture" -ln "SpecularTexture" -nn "Specular Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "SpecularTextureR" -ln "SpecularTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "SpecularTexture"; + addAttr -is true -ci true -sn "SpecularTextureG" -ln "SpecularTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "SpecularTexture"; + addAttr -is true -ci true -sn "SpecularTextureB" -ln "SpecularTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "SpecularTexture"; + addAttr -is true -ci true -h true -sn "SpecularColor_Name" -ln "SpecularColor_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SpecularColor_Type" -ln "SpecularColor_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -k true -sn "SpecularColor" -ln "SpecularColor" -nn "Specular Color" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "SpecularColorR" -ln "SpecularColorR" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "SpecularColor"; + addAttr -is true -ci true -sn "SpecularColorG" -ln "SpecularColorG" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "SpecularColor"; + addAttr -is true -ci true -sn "SpecularColorB" -ln "SpecularColorB" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "SpecularColor"; + addAttr -is true -ci true -h true -sn "UseNormalTexture_Name" -ln "UseNormalTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseNormalTexture_Type" -ln "UseNormalTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseNormalTexture" -ln "UseNormalTexture" + -nn "Use Normal Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "NormalTexture_Name" -ln "NormalTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "NormalTexture_Type" -ln "NormalTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "NormalTexture" -ln "NormalTexture" -nn "Normal Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "NormalTextureR" -ln "NormalTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "NormalTexture"; + addAttr -is true -ci true -sn "NormalTextureG" -ln "NormalTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "NormalTexture"; + addAttr -is true -ci true -sn "NormalTextureB" -ln "NormalTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "NormalTexture"; + addAttr -is true -ci true -h true -sn "NormalHeight_Name" -ln "NormalHeight_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "NormalHeight_Type" -ln "NormalHeight_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "NormalHeight" -ln "NormalHeight" -nn "Normal Height" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -smx 5 -at "float"; + addAttr -is true -ci true -h true -sn "SupportNonUniformScale_Name" -ln "SupportNonUniformScale_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SupportNonUniformScale_Type" -ln "SupportNonUniformScale_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "SupportNonUniformScale" -ln "SupportNonUniformScale" + -nn "Support Non-Uniform Scale" -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "NormalCoordsysX_Name" -ln "NormalCoordsysX_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "NormalCoordsysX_Type" -ln "NormalCoordsysX_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "NormalCoordsysX" -ln "NormalCoordsysX" -nn "Normal X (Red)" + -ct "HW_shader_parameter" -min 0 -max 1 -smn 0 -smx 1 -en "Positive:Negative" -at "enum"; + addAttr -is true -ci true -h true -sn "NormalCoordsysY_Name" -ln "NormalCoordsysY_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "NormalCoordsysY_Type" -ln "NormalCoordsysY_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "NormalCoordsysY" -ln "NormalCoordsysY" -nn "Normal Y (Green)" + -ct "HW_shader_parameter" -min 0 -max 1 -smn 0 -smx 1 -en "Positive:Negative" -at "enum"; + addAttr -is true -ci true -h true -sn "DisplacementModel_Name" -ln "DisplacementModel_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DisplacementModel_Type" -ln "DisplacementModel_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DisplacementModel" -ln "DisplacementModel" + -nn "Displacement Model" -ct "HW_shader_parameter" -min 0 -max 1 -smn 0 -smx 1 -en + "Grayscale:Tangent Vector" -at "enum"; + addAttr -is true -ci true -h true -sn "UseDisplacementMap_Name" -ln "UseDisplacementMap_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseDisplacementMap_Type" -ln "UseDisplacementMap_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseDisplacementMap" -ln "UseDisplacementMap" + -nn "Displacement Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "DisplacementTexture_Name" -ln "DisplacementTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DisplacementTexture_Type" -ln "DisplacementTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "DisplacementTexture" -ln "DisplacementTexture" + -nn "Displacement Map" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "DisplacementTextureR" -ln "DisplacementTextureR" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "DisplacementTexture"; + addAttr -is true -ci true -sn "DisplacementTextureG" -ln "DisplacementTextureG" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "DisplacementTexture"; + addAttr -is true -ci true -sn "DisplacementTextureB" -ln "DisplacementTextureB" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "DisplacementTexture"; + addAttr -is true -ci true -h true -sn "VectorDisplacementCoordSys_Name" -ln "VectorDisplacementCoordSys_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "VectorDisplacementCoordSys_Type" -ln "VectorDisplacementCoordSys_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "VectorDisplacementCoordSys" -ln "VectorDisplacementCoordSys" + -nn "Displacement Coordsys" -ct "HW_shader_parameter" -min 0 -max 1 -smn 0 -smx 1 + -en "Mudbox (XZY):Maya (XYZ)" -at "enum"; + addAttr -is true -ci true -h true -sn "DisplacementHeight_Name" -ln "DisplacementHeight_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DisplacementHeight_Type" -ln "DisplacementHeight_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DisplacementHeight" -ln "DisplacementHeight" + -nn "Displacement Height" -ct "HW_shader_parameter" -dv 0.5 -min -99999 -max 99999 + -smn 0 -smx 10 -at "float"; + addAttr -is true -ci true -h true -sn "DisplacementOffset_Name" -ln "DisplacementOffset_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DisplacementOffset_Type" -ln "DisplacementOffset_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DisplacementOffset" -ln "DisplacementOffset" + -nn "Displacement Offset" -ct "HW_shader_parameter" -dv 0.5 -min -99999 -max 99999 + -smn -1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "DisplacementClippingBias_Name" -ln "DisplacementClippingBias_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DisplacementClippingBias_Type" -ln "DisplacementClippingBias_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DisplacementClippingBias" -ln "DisplacementClippingBias" + -nn "Displacement Clipping Bias" -ct "HW_shader_parameter" -dv 5 -min -99999 -max + 99999 -smn 0 -smx 99 -at "float"; + addAttr -is true -ci true -h true -sn "BBoxExtraScale_Name" -ln "BBoxExtraScale_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "BBoxExtraScale_Type" -ln "BBoxExtraScale_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "BBoxExtraScale" -ln "BBoxExtraScale" -nn "Bounding Box Extra Scale" + -ct "HW_shader_parameter" -dv 1 -min 1 -max 99999 -smx 10 -at "float"; + addAttr -is true -ci true -h true -sn "TessellationRange_Name" -ln "TessellationRange_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "TessellationRange_Type" -ln "TessellationRange_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "TessellationRange" -ln "TessellationRange" + -nn "Tessellation Range" -ct "HW_shader_parameter" -min 0 -max 99999 -smx 999 -at "float"; + addAttr -is true -ci true -h true -sn "TessellationMin_Name" -ln "TessellationMin_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "TessellationMin_Type" -ln "TessellationMin_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "TessellationMin" -ln "TessellationMin" -nn "Tessellation Minimum" + -ct "HW_shader_parameter" -dv 3 -min 1 -max 99999 -smx 10 -at "float"; + addAttr -is true -ci true -h true -sn "FlatTessellation_Name" -ln "FlatTessellation_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "FlatTessellation_Type" -ln "FlatTessellation_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "FlatTessellation" -ln "FlatTessellation" + -nn "Flat Tessellation" -ct "HW_shader_parameter" -min 0 -max 1 -at "float"; + addAttr -is true -ci true -h true -sn "UseTranslucency_Name" -ln "UseTranslucency_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseTranslucency_Type" -ln "UseTranslucency_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseTranslucency" -ln "UseTranslucency" -nn "Back Scattering" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "UseThicknessTexture_Name" -ln "UseThicknessTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseThicknessTexture_Type" -ln "UseThicknessTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseThicknessTexture" -ln "UseThicknessTexture" + -nn "Use Thickness Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "UseDiffuseIBLMap_Name" -ln "UseDiffuseIBLMap_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseDiffuseIBLMap_Type" -ln "UseDiffuseIBLMap_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseDiffuseIBLMap" -ln "UseDiffuseIBLMap" + -nn "Use Diffuse Cubemap" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "DiffuseIBLIntensity_Name" -ln "DiffuseIBLIntensity_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DiffuseIBLIntensity_Type" -ln "DiffuseIBLIntensity_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DiffuseIBLIntensity" -ln "DiffuseIBLIntensity" + -nn "Diffuse IBL Intensity" -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -smx + 2 -at "float"; + addAttr -is true -ci true -h true -sn "DiffuseTexcoord_Name" -ln "DiffuseTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DiffuseTexcoord_Type" -ln "DiffuseTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DiffuseTexcoord" -ln "DiffuseTexcoord" -nn "Diffuse Map UV" + -ct "HW_shader_parameter" -min 0 -max 2 -smn 0 -smx 1 -en "TexCoord0:TexCoord1:TexCoord2" + -at "enum"; + addAttr -is true -ci true -h true -sn "OpacityMaskTexcoord_Name" -ln "OpacityMaskTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "OpacityMaskTexcoord_Type" -ln "OpacityMaskTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "OpacityMaskTexcoord" -ln "OpacityMaskTexcoord" + -nn "Opacity Mask UV" -ct "HW_shader_parameter" -min 0 -max 2 -smn 0 -smx 1 -en "TexCoord0:TexCoord1:TexCoord2" + -at "enum"; + addAttr -is true -ci true -h true -sn "SpecularTexcoord_Name" -ln "SpecularTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SpecularTexcoord_Type" -ln "SpecularTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "SpecularTexcoord" -ln "SpecularTexcoord" + -nn "Specular Map UV" -ct "HW_shader_parameter" -min 0 -max 2 -smn 0 -smx 1 -en "TexCoord0:TexCoord1:TexCoord2" + -at "enum"; + addAttr -is true -ci true -h true -sn "NormalTexcoord_Name" -ln "NormalTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "NormalTexcoord_Type" -ln "NormalTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "NormalTexcoord" -ln "NormalTexcoord" -nn "Normal Map UV" + -ct "HW_shader_parameter" -min 0 -max 2 -smn 0 -smx 1 -en "TexCoord0:TexCoord1:TexCoord2" + -at "enum"; + addAttr -is true -ci true -h true -sn "DisplacementTexcoord_Name" -ln "DisplacementTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DisplacementTexcoord_Type" -ln "DisplacementTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DisplacementTexcoord" -ln "DisplacementTexcoord" + -nn "Displacement Map UV" -ct "HW_shader_parameter" -min 0 -max 2 -smn 0 -smx 1 -en + "TexCoord0:TexCoord1:TexCoord2" -at "enum"; + addAttr -is true -ci true -h true -sn "ThicknessTexcoord_Name" -ln "ThicknessTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "ThicknessTexcoord_Type" -ln "ThicknessTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "ThicknessTexcoord" -ln "ThicknessTexcoord" + -nn "Translucency Mask UV" -ct "HW_shader_parameter" -min 0 -max 2 -smn 0 -smx 1 + -en "TexCoord0:TexCoord1:TexCoord2" -at "enum"; + addAttr -is true -ci true -h true -sn "light0ShadowMap_Name" -ln "light0ShadowMap_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0ShadowMap_Type" -ln "light0ShadowMap_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -h true -sn "light0ShadowMap" -ln "light0ShadowMap" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "light0ShadowMapR" -ln "light0ShadowMapR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light0ShadowMap"; + addAttr -is true -ci true -sn "light0ShadowMapG" -ln "light0ShadowMapG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light0ShadowMap"; + addAttr -is true -ci true -sn "light0ShadowMapB" -ln "light0ShadowMapB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light0ShadowMap"; + addAttr -is true -ci true -h true -sn "light1ShadowMap_Name" -ln "light1ShadowMap_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1ShadowMap_Type" -ln "light1ShadowMap_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -h true -sn "light1ShadowMap" -ln "light1ShadowMap" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "light1ShadowMapR" -ln "light1ShadowMapR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light1ShadowMap"; + addAttr -is true -ci true -sn "light1ShadowMapG" -ln "light1ShadowMapG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light1ShadowMap"; + addAttr -is true -ci true -sn "light1ShadowMapB" -ln "light1ShadowMapB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light1ShadowMap"; + addAttr -is true -ci true -h true -sn "light2ShadowMap_Name" -ln "light2ShadowMap_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2ShadowMap_Type" -ln "light2ShadowMap_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -h true -sn "light2ShadowMap" -ln "light2ShadowMap" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "light2ShadowMapR" -ln "light2ShadowMapR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light2ShadowMap"; + addAttr -is true -ci true -sn "light2ShadowMapG" -ln "light2ShadowMapG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light2ShadowMap"; + addAttr -is true -ci true -sn "light2ShadowMapB" -ln "light2ShadowMapB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light2ShadowMap"; + addAttr -is true -ci true -h true -sn "screenSize_Name" -ln "screenSize_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "screenSize_Type" -ln "screenSize_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "screenSize" -ln "screenSize" -ct "HW_shader_parameter" + -at "float2" -nc 2; + addAttr -is true -ci true -sn "screenSizeX" -ln "screenSizeX" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "screenSize"; + addAttr -is true -ci true -sn "screenSizeY" -ln "screenSizeY" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "screenSize"; + addAttr -is true -ci true -h true -sn "SkyRotation_Name" -ln "SkyRotation_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SkyRotation_Type" -ln "SkyRotation_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "SkyRotation" -ln "SkyRotation" -nn "Sky Rotation" + -ct "HW_shader_parameter" -min 0 -max 99999 -smn 0 -smx 360 -at "float"; + addAttr -is true -ci true -h true -sn "DiffuseCubeIBL_Name" -ln "DiffuseCubeIBL_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DiffuseCubeIBL_Type" -ln "DiffuseCubeIBL_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "DiffuseCubeIBL" -ln "DiffuseCubeIBL" -nn "Diffuse Cubemap" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "DiffuseCubeIBLR" -ln "DiffuseCubeIBLR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DiffuseCubeIBL"; + addAttr -is true -ci true -sn "DiffuseCubeIBLG" -ln "DiffuseCubeIBLG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DiffuseCubeIBL"; + addAttr -is true -ci true -sn "DiffuseCubeIBLB" -ln "DiffuseCubeIBLB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DiffuseCubeIBL"; + addAttr -is true -ci true -h true -sn "UseSpecCubeIBL_Name" -ln "UseSpecCubeIBL_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseSpecCubeIBL_Type" -ln "UseSpecCubeIBL_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseSpecCubeIBL" -ln "UseSpecCubeIBL" -nn "Use Specular Cubemap" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "SpecularIBLIntensity_Name" -ln "SpecularIBLIntensity_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SpecularIBLIntensity_Type" -ln "SpecularIBLIntensity_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "SpecularIBLIntensity" -ln "SpecularIBLIntensity" + -nn "Specular IBL Intensity" -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -smx + 2 -at "float"; + addAttr -is true -ci true -h true -sn "SpecularCubeIBL_Name" -ln "SpecularCubeIBL_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SpecularCubeIBL_Type" -ln "SpecularCubeIBL_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "SpecularCubeIBL" -ln "SpecularCubeIBL" -nn "Specular Cubemap" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "SpecularCubeIBLR" -ln "SpecularCubeIBLR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "SpecularCubeIBL"; + addAttr -is true -ci true -sn "SpecularCubeIBLG" -ln "SpecularCubeIBLG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "SpecularCubeIBL"; + addAttr -is true -ci true -sn "SpecularCubeIBLB" -ln "SpecularCubeIBLB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "SpecularCubeIBL"; + addAttr -is true -ci true -h true -sn "LutTexture_Name" -ln "LutTexture_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "LutTexture_Type" -ln "LutTexture_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -uac -sn "LutTexture" -ln "LutTexture" -nn "SSS LUT Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "LutTextureR" -ln "LutTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "LutTexture"; + addAttr -is true -ci true -sn "LutTextureG" -ln "LutTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "LutTexture"; + addAttr -is true -ci true -sn "LutTextureB" -ln "LutTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "LutTexture"; + addAttr -is true -ci true -h true -sn "DitherTexture_Name" -ln "DitherTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DitherTexture_Type" -ln "DitherTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "DitherTexture" -ln "DitherTexture" -nn "SSS Dither Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "DitherTextureR" -ln "DitherTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DitherTexture"; + addAttr -is true -ci true -sn "DitherTextureG" -ln "DitherTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DitherTexture"; + addAttr -is true -ci true -sn "DitherTextureB" -ln "DitherTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DitherTexture"; + addAttr -is true -ci true -h true -sn "skinCoeffX_Name" -ln "skinCoeffX_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "skinCoeffX_Type" -ln "skinCoeffX_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "skinCoeffX" -ln "skinCoeffX" -nn "SSS Coeffient R" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "skinCoeffY_Name" -ln "skinCoeffY_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "skinCoeffY_Type" -ln "skinCoeffY_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "skinCoeffY" -ln "skinCoeffY" -nn "SSS Coeffient G" + -ct "HW_shader_parameter" -dv 0.5 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "skinCoeffZ_Name" -ln "skinCoeffZ_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "skinCoeffZ_Type" -ln "skinCoeffZ_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "skinCoeffZ" -ln "skinCoeffZ" -nn "SSS Coeffient B" + -ct "HW_shader_parameter" -dv 0.25 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "NormalBlurring_Name" -ln "NormalBlurring_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "NormalBlurring_Type" -ln "NormalBlurring_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "NormalBlurring" -ln "NormalBlurring" -nn "SSS Softness" + -ct "HW_shader_parameter" -dv 0.25 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "ScatteringRadiusTexture_Name" -ln "ScatteringRadiusTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "ScatteringRadiusTexture_Type" -ln "ScatteringRadiusTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "ScatteringRadiusTexture" -ln "ScatteringRadiusTexture" + -nn "SSS Radius Map" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "ScatteringRadiusTextureR" -ln "ScatteringRadiusTextureR" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "ScatteringRadiusTexture"; + addAttr -is true -ci true -sn "ScatteringRadiusTextureG" -ln "ScatteringRadiusTextureG" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "ScatteringRadiusTexture"; + addAttr -is true -ci true -sn "ScatteringRadiusTextureB" -ln "ScatteringRadiusTextureB" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "ScatteringRadiusTexture"; + addAttr -is true -ci true -h true -sn "UseScatteringRadiusTexture_Name" -ln "UseScatteringRadiusTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseScatteringRadiusTexture_Type" -ln "UseScatteringRadiusTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseScatteringRadiusTexture" -ln "UseScatteringRadiusTexture" + -nn "Use SSS Radius Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "skinScattering_Name" -ln "skinScattering_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "skinScattering_Type" -ln "skinScattering_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "skinScattering" -ln "skinScattering" -nn "SSS Radius" + -ct "HW_shader_parameter" -dv 0.25 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "shadowBlur_Name" -ln "shadowBlur_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "shadowBlur_Type" -ln "shadowBlur_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "shadowBlur" -ln "shadowBlur" -nn "SSS Shadow Blur" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "shadowDither_Name" -ln "shadowDither_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowDither_Type" -ln "shadowDither_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "shadowDither" -ln "shadowDither" -nn "SSS Shadow Dither" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "shadowScattering_Name" -ln "shadowScattering_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowScattering_Type" -ln "shadowScattering_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "shadowScattering" -ln "shadowScattering" + -nn "SSS Shadow Scattering" -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -smx 1 + -at "float"; + addAttr -is true -ci true -h true -sn "shadowSaturation_Name" -ln "shadowSaturation_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowSaturation_Type" -ln "shadowSaturation_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "shadowSaturation" -ln "shadowSaturation" + -nn "SSS Shadow Saturation" -ct "HW_shader_parameter" -dv 1 -min 0 -max 4 -smx 4 + -at "float"; + addAttr -is true -ci true -h true -sn "BackScatteringThicknessTexture_Name" -ln "BackScatteringThicknessTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "BackScatteringThicknessTexture_Type" -ln "BackScatteringThicknessTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "BackScatteringThicknessTexture" -ln "BackScatteringThicknessTexture" + -nn "Thickness Map" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "BackScatteringThicknessTextureR" -ln "BackScatteringThicknessTextureR" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "BackScatteringThicknessTexture"; + addAttr -is true -ci true -sn "BackScatteringThicknessTextureG" -ln "BackScatteringThicknessTextureG" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "BackScatteringThicknessTexture"; + addAttr -is true -ci true -sn "BackScatteringThicknessTextureB" -ln "BackScatteringThicknessTextureB" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "BackScatteringThicknessTexture"; + addAttr -is true -ci true -h true -sn "skinScatteringRoughness_Name" -ln "skinScatteringRoughness_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "skinScatteringRoughness_Type" -ln "skinScatteringRoughness_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "skinScatteringRoughness" -ln "skinScatteringRoughness" + -nn "Back Scattering Width" -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -smx 1 + -at "float"; + addAttr -is true -ci true -h true -sn "skinScatteringOuterColor_Name" -ln "skinScatteringOuterColor_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "skinScatteringOuterColor_Type" -ln "skinScatteringOuterColor_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -k true -sn "skinScatteringOuterColor" -ln "skinScatteringOuterColor" + -nn "Back Scattering Color" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "skinScatteringOuterColorR" -ln "skinScatteringOuterColorR" + -ct "HW_shader_parameter" -dv 0.25 -smn 0 -smx 1 -at "float" -p "skinScatteringOuterColor"; + addAttr -is true -ci true -sn "skinScatteringOuterColorG" -ln "skinScatteringOuterColorG" + -ct "HW_shader_parameter" -dv 0.05000000074505806 -smn 0 -smx 1 -at "float" -p "skinScatteringOuterColor"; + addAttr -is true -ci true -sn "skinScatteringOuterColorB" -ln "skinScatteringOuterColorB" + -ct "HW_shader_parameter" -dv 0.019999999552965164 -smn 0 -smx 1 -at "float" -p "skinScatteringOuterColor"; + addAttr -is true -ci true -h true -sn "skinScatteringAmount_Name" -ln "skinScatteringAmount_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "skinScatteringAmount_Type" -ln "skinScatteringAmount_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "skinScatteringAmount" -ln "skinScatteringAmount" + -nn "Back Scattering Amount" -ct "HW_shader_parameter" -dv 1 -min 0 -max 6 -smx 6 + -at "float"; + addAttr -is true -ci true -h true -sn "skinAmbientScatteringAmount_Name" -ln "skinAmbientScatteringAmount_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "skinAmbientScatteringAmount_Type" -ln "skinAmbientScatteringAmount_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "skinAmbientScatteringAmount" -ln "skinAmbientScatteringAmount" + -nn "Back Scattering Ambient Amount" -ct "HW_shader_parameter" -dv 1 -min 0 -max + 6 -smx 6 -at "float"; + addAttr -is true -ci true -h true -sn "UseSpecularTextureAlpha_Name" -ln "UseSpecularTextureAlpha_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseSpecularTextureAlpha_Type" -ln "UseSpecularTextureAlpha_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseSpecularTextureAlpha" -ln "UseSpecularTextureAlpha" + -nn "Use Roughness Map Alpha" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "LobeMix_Name" -ln "LobeMix_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "LobeMix_Type" -ln "LobeMix_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "LobeMix" -ln "LobeMix" -nn "Lobe Mixing" + -ct "HW_shader_parameter" -dv 0.75 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "Roughness_Name" -ln "Roughness_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "Roughness_Type" -ln "Roughness_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "Roughness" -ln "Roughness" -nn "Roughness multiplier" + -ct "HW_shader_parameter" -dv 0.20000000298023224 -min 0.0099999997764825821 -max + 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "OcclusionTexture_Name" -ln "OcclusionTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "OcclusionTexture_Type" -ln "OcclusionTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "OcclusionTexture" -ln "OcclusionTexture" -nn "Ambient Occlusion Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "OcclusionTextureR" -ln "OcclusionTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "OcclusionTexture"; + addAttr -is true -ci true -sn "OcclusionTextureG" -ln "OcclusionTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "OcclusionTexture"; + addAttr -is true -ci true -sn "OcclusionTextureB" -ln "OcclusionTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "OcclusionTexture"; + addAttr -is true -ci true -h true -sn "OcclusionAmount_Name" -ln "OcclusionAmount_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "OcclusionAmount_Type" -ln "OcclusionAmount_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "OcclusionAmount" -ln "OcclusionAmount" -nn "Occlusion Amount" + -ct "HW_shader_parameter" -dv 1 -min 0.0099999997764825821 -max 2 -smx 2 -at "float"; + addAttr -is true -ci true -h true -sn "UseCavityTexture_Name" -ln "UseCavityTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseCavityTexture_Type" -ln "UseCavityTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseCavityTexture" -ln "UseCavityTexture" + -nn "Use Cavity Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "CavityTexture_Name" -ln "CavityTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "CavityTexture_Type" -ln "CavityTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "CavityTexture" -ln "CavityTexture" -nn "Cavity Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "CavityTextureR" -ln "CavityTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "CavityTexture"; + addAttr -is true -ci true -sn "CavityTextureG" -ln "CavityTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "CavityTexture"; + addAttr -is true -ci true -sn "CavityTextureB" -ln "CavityTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "CavityTexture"; + addAttr -is true -ci true -h true -sn "CavityAmount_Name" -ln "CavityAmount_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "CavityAmount_Type" -ln "CavityAmount_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "CavityAmount" -ln "CavityAmount" -nn "Cavity Amount" + -ct "HW_shader_parameter" -dv 1 -min 0.0099999997764825821 -max 2 -smx 2 -at "float"; + addAttr -is true -ci true -h true -sn "UseMicroCavityTexture_Name" -ln "UseMicroCavityTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseMicroCavityTexture_Type" -ln "UseMicroCavityTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseMicroCavityTexture" -ln "UseMicroCavityTexture" + -nn "Use Micro Cavity Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "MicroCavityTexture_Name" -ln "MicroCavityTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "MicroCavityTexture_Type" -ln "MicroCavityTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "MicroCavityTexture" -ln "MicroCavityTexture" + -nn "Micro Cavity Map" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "MicroCavityTextureR" -ln "MicroCavityTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "MicroCavityTexture"; + addAttr -is true -ci true -sn "MicroCavityTextureG" -ln "MicroCavityTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "MicroCavityTexture"; + addAttr -is true -ci true -sn "MicroCavityTextureB" -ln "MicroCavityTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "MicroCavityTexture"; + addAttr -is true -ci true -h true -sn "MicroCavityAmount_Name" -ln "MicroCavityAmount_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "MicroCavityAmount_Type" -ln "MicroCavityAmount_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "MicroCavityAmount" -ln "MicroCavityAmount" + -nn "Micro Cavity Amount" -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -smx + 2 -at "float"; + addAttr -is true -ci true -h true -sn "UseMicroNormalTexture_Name" -ln "UseMicroNormalTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseMicroNormalTexture_Type" -ln "UseMicroNormalTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseMicroNormalTexture" -ln "UseMicroNormalTexture" + -nn "Use Micro Normal Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "MicroNormalTexture_Name" -ln "MicroNormalTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "MicroNormalTexture_Type" -ln "MicroNormalTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "MicroNormalTexture" -ln "MicroNormalTexture" + -nn "Micro Normal Map" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "MicroNormalTextureR" -ln "MicroNormalTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "MicroNormalTexture"; + addAttr -is true -ci true -sn "MicroNormalTextureG" -ln "MicroNormalTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "MicroNormalTexture"; + addAttr -is true -ci true -sn "MicroNormalTextureB" -ln "MicroNormalTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "MicroNormalTexture"; + addAttr -is true -ci true -h true -sn "MicroNormalHeight_Name" -ln "MicroNormalHeight_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "MicroNormalHeight_Type" -ln "MicroNormalHeight_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "MicroNormalHeight" -ln "MicroNormalHeight" + -nn "Micro Normal Height" -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -smx + 5 -at "float"; + addAttr -is true -ci true -h true -sn "MicroScale_Name" -ln "MicroScale_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "MicroScale_Type" -ln "MicroScale_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "MicroScale" -ln "MicroScale" -nn "Micro Scale" + -ct "HW_shader_parameter" -dv 32 -min 16 -max 99999 -smx 256 -at "float"; + addAttr -is true -ci true -h true -sn "UseBlendTexture_Name" -ln "UseBlendTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseBlendTexture_Type" -ln "UseBlendTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseBlendTexture" -ln "UseBlendTexture" -nn "Enable Wrinkle Mixing" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "OcclusionTexcoord_Name" -ln "OcclusionTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "OcclusionTexcoord_Type" -ln "OcclusionTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "OcclusionTexcoord" -ln "OcclusionTexcoord" + -nn "Ambient Occlusion Map UV" -ct "HW_shader_parameter" -dv 1 -min 0 -max 2 -smn + 0 -smx 1 -en "TexCoord0:TexCoord1:TexCoord2" -at "enum"; + addAttr -ci true -sn "Position" -ln "Position" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "Position_Name" -ln "Position_Name" -ct "HW_shader_parameter" + -dt "string" -p "Position"; + addAttr -is true -ci true -h true -sn "Position_Source" -ln "Position_Source" -ct "HW_shader_parameter" + -dt "string" -p "Position"; + addAttr -is true -ci true -sn "Position_DefaultTexture" -ln "Position_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "Position"; + addAttr -ci true -sn "TexCoord0" -ln "TexCoord0" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "TexCoord0_Name" -ln "TexCoord0_Name" -ct "HW_shader_parameter" + -dt "string" -p "TexCoord0"; + addAttr -is true -ci true -h true -sn "TexCoord0_Source" -ln "TexCoord0_Source" + -ct "HW_shader_parameter" -dt "string" -p "TexCoord0"; + addAttr -is true -ci true -sn "TexCoord0_DefaultTexture" -ln "TexCoord0_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "TexCoord0"; + addAttr -ci true -sn "TexCoord1" -ln "TexCoord1" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "TexCoord1_Name" -ln "TexCoord1_Name" -ct "HW_shader_parameter" + -dt "string" -p "TexCoord1"; + addAttr -is true -ci true -h true -sn "TexCoord1_Source" -ln "TexCoord1_Source" + -ct "HW_shader_parameter" -dt "string" -p "TexCoord1"; + addAttr -is true -ci true -sn "TexCoord1_DefaultTexture" -ln "TexCoord1_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "TexCoord1"; + addAttr -ci true -sn "TexCoord2" -ln "TexCoord2" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "TexCoord2_Name" -ln "TexCoord2_Name" -ct "HW_shader_parameter" + -dt "string" -p "TexCoord2"; + addAttr -is true -ci true -h true -sn "TexCoord2_Source" -ln "TexCoord2_Source" + -ct "HW_shader_parameter" -dt "string" -p "TexCoord2"; + addAttr -is true -ci true -sn "TexCoord2_DefaultTexture" -ln "TexCoord2_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "TexCoord2"; + addAttr -ci true -sn "Normal" -ln "Normal" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "Normal_Name" -ln "Normal_Name" -ct "HW_shader_parameter" + -dt "string" -p "Normal"; + addAttr -is true -ci true -h true -sn "Normal_Source" -ln "Normal_Source" -ct "HW_shader_parameter" + -dt "string" -p "Normal"; + addAttr -is true -ci true -sn "Normal_DefaultTexture" -ln "Normal_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "Normal"; + addAttr -ci true -sn "Binormal0" -ln "Binormal0" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "Binormal0_Name" -ln "Binormal0_Name" -ct "HW_shader_parameter" + -dt "string" -p "Binormal0"; + addAttr -is true -ci true -h true -sn "Binormal0_Source" -ln "Binormal0_Source" + -ct "HW_shader_parameter" -dt "string" -p "Binormal0"; + addAttr -is true -ci true -sn "Binormal0_DefaultTexture" -ln "Binormal0_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "Binormal0"; + addAttr -ci true -sn "Tangent0" -ln "Tangent0" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "Tangent0_Name" -ln "Tangent0_Name" -ct "HW_shader_parameter" + -dt "string" -p "Tangent0"; + addAttr -is true -ci true -h true -sn "Tangent0_Source" -ln "Tangent0_Source" -ct "HW_shader_parameter" + -dt "string" -p "Tangent0"; + addAttr -is true -ci true -sn "Tangent0_DefaultTexture" -ln "Tangent0_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "Tangent0"; + setAttr ".vpar" -type "stringArray" 7 "Position" "TexCoord0" "TexCoord1" "TexCoord2" "Normal" "Binormal0" "Tangent0" ; + setAttr ".upar" -type "stringArray" 124 "SuperFilterTaps" "shadowMapTexelSize" "IsSwatchRender" "screenSize" "MayaFullScreenGamma" "light0Enable" "light0Type" "light0Pos" "light0Color" "light0Intensity" "light0Dir" "light0ConeAngle" "light0FallOff" "light0AttenScale" "light0ShadowOn" "light1Enable" "light1Type" "light1Pos" "light1Color" "light1Intensity" "light1Dir" "light1ConeAngle" "light1FallOff" "light1AttenScale" "light1ShadowOn" "light2Enable" "light2Type" "light2Pos" "light2Color" "light2Intensity" "light2Dir" "light2ConeAngle" "light2FallOff" "light2AttenScale" "light2ShadowOn" "LinearSpaceLighting" "UseShadows" "shadowMultiplier" "shadowDepthBias" "flipBackfaceNormals" "SkyRotation" "UseDiffuseIBLMap" "DiffuseIBLIntensity" "DiffuseCubeIBL" "UseSpecCubeIBL" "SpecularIBLIntensity" "SpecularCubeIBL" "transpDepthTexture" "opaqueDepthTexture" "UseDiffuseTexture" "UseDiffuseTextureAlpha" "DiffuseTexture" "DiffuseColor" "LutTexture" "DitherTexture" "skinCoeffX" "skinCoeffY" "skinCoeffZ" "NormalBlurring" "UseScatteringRadiusTexture" "ScatteringRadiusTexture" "skinScattering" "shadowBlur" "shadowDither" "shadowScattering" "shadowSaturation" "UseTranslucency" "BackScatteringThicknessTexture" "UseThicknessTexture" "skinScatteringRoughness" "skinScatteringOuterColor" "skinScatteringAmount" "skinAmbientScatteringAmount" "UseSpecularTextureAlpha" "UseSpecularTexture" "SpecularTexture" "SpecularColor" "LobeMix" "Roughness" "UseAmbientOcclusionTexture" "OcclusionTexture" "OcclusionAmount" "UseCavityTexture" "CavityTexture" "CavityAmount" "UseNormalTexture" "NormalTexture" "NormalHeight" "SupportNonUniformScale" "NormalCoordsysX" "NormalCoordsysY" "UseMicroCavityTexture" "MicroCavityTexture" "MicroCavityAmount" "UseMicroNormalTexture" "MicroNormalTexture" "MicroNormalHeight" "MicroScale" "OpacityMaskTexture" "Opacity" "UseOpacityMaskTexture" "OpacityMaskBias" "DisplacementModel" "UseDisplacementMap" "DisplacementTexture" "VectorDisplacementCoordSys" "DisplacementHeight" "DisplacementOffset" "DisplacementClippingBias" "BBoxExtraScale" "TessellationRange" "TessellationMin" "FlatTessellation" "UseBlendTexture" "DiffuseTexcoord" "OcclusionTexcoord" "OpacityMaskTexcoord" "SpecularTexcoord" "NormalTexcoord" "DisplacementTexcoord" "ThicknessTexcoord" "light0ShadowMap" "light1ShadowMap" "light2ShadowMap" ; + setAttr ".s" -type "string" "$PROJECT_ROOT/Common/SourceAssets/shaders/dx11_shd_eyeLeft.fx"; + setAttr ".t" -type "string" "TessellationOFF"; + setAttr ".SuperFilterTaps_Name" -type "string" "SuperFilterTaps"; + setAttr ".SuperFilterTaps_Type" -type "string" "float1x2"; + setAttr ".SuperFilterTaps" -type "float2" -0.84052002 -0.073954001 ; + setAttr ".shadowMapTexelSize_Name" -type "string" "shadowMapTexelSize"; + setAttr ".shadowMapTexelSize_Type" -type "string" "float"; + setAttr ".shadowMapTexelSize" 0.0019531298894435167; + setAttr ".LinearSpaceLighting_Name" -type "string" "LinearSpaceLighting"; + setAttr ".LinearSpaceLighting_Type" -type "string" "bool"; + setAttr -k on ".LinearSpaceLighting" yes; + setAttr ".UseShadows_Name" -type "string" "UseShadows"; + setAttr ".UseShadows_Type" -type "string" "bool"; + setAttr -k on ".UseShadows" yes; + setAttr ".shadowMultiplier_Name" -type "string" "shadowMultiplier"; + setAttr ".shadowMultiplier_Type" -type "string" "float"; + setAttr -k on ".shadowMultiplier" 1; + setAttr ".IsSwatchRender_Name" -type "string" "IsSwatchRender"; + setAttr ".IsSwatchRender_Type" -type "string" "bool"; + setAttr ".IsSwatchRender" no; + setAttr ".shadowDepthBias_Name" -type "string" "shadowDepthBias"; + setAttr ".shadowDepthBias_Type" -type "string" "float"; + setAttr -k on ".shadowDepthBias" 0.0099999997764825821; + setAttr ".MayaFullScreenGamma_Name" -type "string" "MayaFullScreenGamma"; + setAttr ".MayaFullScreenGamma_Type" -type "string" "bool"; + setAttr ".MayaFullScreenGamma" no; + setAttr ".flipBackfaceNormals_Name" -type "string" "flipBackfaceNormals"; + setAttr ".flipBackfaceNormals_Type" -type "string" "bool"; + setAttr -k on ".flipBackfaceNormals" yes; + setAttr ".light0Enable_Name" -type "string" "light0Enable"; + setAttr ".light0Enable_Type" -type "string" "bool"; + setAttr -l on -k on ".light0Enable" no; + setAttr ".light0Type_Name" -type "string" "light0Type"; + setAttr ".light0Type_Type" -type "string" "enum"; + setAttr -l on -k on ".light0Type" 2; + setAttr ".light0Pos_Name" -type "string" "light0Pos"; + setAttr ".light0Pos_Type" -type "string" "matrix1x3"; + setAttr -l on -k on ".light0Pos" -type "matrix" 1 0 0 0 0 1 0 0 0 0 1 0 100 100 100 1; + setAttr ".light0Color_Name" -type "string" "light0Color"; + setAttr ".light0Color_Type" -type "string" "color1x3"; + setAttr -l on -k on ".light0Color" -type "float3" 1 1 1 ; + setAttr -l on -k on ".light0Color"; + setAttr ".light0Intensity_Name" -type "string" "light0Intensity"; + setAttr ".light0Intensity_Type" -type "string" "float"; + setAttr -l on -k on ".light0Intensity" 1; + setAttr ".light0Dir_Name" -type "string" "light0Dir"; + setAttr ".light0Dir_Type" -type "string" "matrix1x3"; + setAttr -l on -k on ".light0Dir" -type "matrix" 1 0 0 0 0 1 0 0 -100 -100 -100 0 + 0 0 0 1; + setAttr ".light0ConeAngle_Name" -type "string" "light0ConeAngle"; + setAttr ".light0ConeAngle_Type" -type "string" "float"; + setAttr -l on -k on ".light0ConeAngle" 0.46000000834465027; + setAttr ".light0FallOff_Name" -type "string" "light0FallOff"; + setAttr ".light0FallOff_Type" -type "string" "float"; + setAttr -l on -k on ".light0FallOff" 0.69999998807907104; + setAttr ".light0AttenScale_Name" -type "string" "light0AttenScale"; + setAttr ".light0AttenScale_Type" -type "string" "float"; + setAttr -l on -k on ".light0AttenScale" 0; + setAttr ".light0ShadowOn_Name" -type "string" "light0ShadowOn"; + setAttr ".light0ShadowOn_Type" -type "string" "bool"; + setAttr ".light0ShadowOn" yes; + setAttr ".light1Enable_Name" -type "string" "light1Enable"; + setAttr ".light1Enable_Type" -type "string" "bool"; + setAttr -l on -k on ".light1Enable" no; + setAttr ".light1Type_Name" -type "string" "light1Type"; + setAttr ".light1Type_Type" -type "string" "enum"; + setAttr -l on -k on ".light1Type" 2; + setAttr ".light1Pos_Name" -type "string" "light1Pos"; + setAttr ".light1Pos_Type" -type "string" "matrix1x3"; + setAttr -l on -k on ".light1Pos" -type "matrix" 1 0 0 0 0 1 0 0 0 0 1 0 -100 100 100 1; + setAttr ".light1Color_Name" -type "string" "light1Color"; + setAttr ".light1Color_Type" -type "string" "color1x3"; + setAttr -l on -k on ".light1Color" -type "float3" 1 1 1 ; + setAttr -l on -k on ".light1Color"; + setAttr ".light1Intensity_Name" -type "string" "light1Intensity"; + setAttr ".light1Intensity_Type" -type "string" "float"; + setAttr -l on -k on ".light1Intensity" 1; + setAttr ".light1Dir_Name" -type "string" "light1Dir"; + setAttr ".light1Dir_Type" -type "string" "matrix1x3"; + setAttr -l on -k on ".light1Dir" -type "matrix" 1 0 0 0 0 1 0 0 -100 -100 -100 0 + 0 0 0 1; + setAttr ".light1ConeAngle_Name" -type "string" "light1ConeAngle"; + setAttr ".light1ConeAngle_Type" -type "string" "float"; + setAttr -l on -k on ".light1ConeAngle" 45; + setAttr ".light1FallOff_Name" -type "string" "light1FallOff"; + setAttr ".light1FallOff_Type" -type "string" "float"; + setAttr -l on -k on ".light1FallOff" 0; + setAttr ".light1AttenScale_Name" -type "string" "light1AttenScale"; + setAttr ".light1AttenScale_Type" -type "string" "float"; + setAttr -l on -k on ".light1AttenScale" 0; + setAttr ".light1ShadowOn_Name" -type "string" "light1ShadowOn"; + setAttr ".light1ShadowOn_Type" -type "string" "bool"; + setAttr ".light1ShadowOn" yes; + setAttr ".light2Enable_Name" -type "string" "light2Enable"; + setAttr ".light2Enable_Type" -type "string" "bool"; + setAttr -l on -k on ".light2Enable" no; + setAttr ".light2Type_Name" -type "string" "light2Type"; + setAttr ".light2Type_Type" -type "string" "enum"; + setAttr -l on -k on ".light2Type" 2; + setAttr ".light2Pos_Name" -type "string" "light2Pos"; + setAttr ".light2Pos_Type" -type "string" "matrix1x3"; + setAttr -l on -k on ".light2Pos" -type "matrix" 1 0 0 0 0 1 0 0 0 0 1 0 100 100 -100 1; + setAttr ".light2Color_Name" -type "string" "light2Color"; + setAttr ".light2Color_Type" -type "string" "color1x3"; + setAttr -l on -k on ".light2Color" -type "float3" 1 1 1 ; + setAttr -l on -k on ".light2Color"; + setAttr ".light2Intensity_Name" -type "string" "light2Intensity"; + setAttr ".light2Intensity_Type" -type "string" "float"; + setAttr -l on -k on ".light2Intensity" 1; + setAttr ".light2Dir_Name" -type "string" "light2Dir"; + setAttr ".light2Dir_Type" -type "string" "matrix1x3"; + setAttr -l on -k on ".light2Dir" -type "matrix" 1 0 0 0 0 1 0 0 -100 -100 -100 0 + 0 0 0 1; + setAttr ".light2ConeAngle_Name" -type "string" "light2ConeAngle"; + setAttr ".light2ConeAngle_Type" -type "string" "float"; + setAttr -l on -k on ".light2ConeAngle" 45; + setAttr ".light2FallOff_Name" -type "string" "light2FallOff"; + setAttr ".light2FallOff_Type" -type "string" "float"; + setAttr -l on -k on ".light2FallOff" 0; + setAttr ".light2AttenScale_Name" -type "string" "light2AttenScale"; + setAttr ".light2AttenScale_Type" -type "string" "float"; + setAttr -l on -k on ".light2AttenScale" 0; + setAttr ".light2ShadowOn_Name" -type "string" "light2ShadowOn"; + setAttr ".light2ShadowOn_Type" -type "string" "bool"; + setAttr ".light2ShadowOn" yes; + setAttr ".UseAmbientOcclusionTexture_Name" -type "string" "UseAmbientOcclusionTexture"; + setAttr ".UseAmbientOcclusionTexture_Type" -type "string" "bool"; + setAttr -k on ".UseAmbientOcclusionTexture" no; + setAttr ".transpDepthTexture_Name" -type "string" "transpDepthTexture"; + setAttr ".transpDepthTexture_Type" -type "string" "texture"; + setAttr ".transpDepthTexture" -type "float3" 0 0 0 ; + setAttr ".opaqueDepthTexture_Name" -type "string" "opaqueDepthTexture"; + setAttr ".opaqueDepthTexture_Type" -type "string" "texture"; + setAttr ".opaqueDepthTexture" -type "float3" 0 0 0 ; + setAttr ".UseDiffuseTexture_Name" -type "string" "UseDiffuseTexture"; + setAttr ".UseDiffuseTexture_Type" -type "string" "bool"; + setAttr -k on ".UseDiffuseTexture" yes; + setAttr ".UseDiffuseTextureAlpha_Name" -type "string" "UseDiffuseTextureAlpha"; + setAttr ".UseDiffuseTextureAlpha_Type" -type "string" "bool"; + setAttr -k on ".UseDiffuseTextureAlpha" no; + setAttr ".DiffuseTexture_Name" -type "string" "DiffuseTexture"; + setAttr ".DiffuseTexture_Type" -type "string" "texture"; + setAttr ".DiffuseTexture" -type "float3" 0 0 0 ; + setAttr ".DiffuseColor_Name" -type "string" "DiffuseColor"; + setAttr ".DiffuseColor_Type" -type "string" "color1x3"; + setAttr -k on ".DiffuseColor" -type "float3" 1 1 1 ; + setAttr ".Opacity_Name" -type "string" "Opacity"; + setAttr ".Opacity_Type" -type "string" "float"; + setAttr -k on ".Opacity" 1; + setAttr ".UseOpacityMaskTexture_Name" -type "string" "UseOpacityMaskTexture"; + setAttr ".UseOpacityMaskTexture_Type" -type "string" "bool"; + setAttr -k on ".UseOpacityMaskTexture" no; + setAttr ".OpacityMaskTexture_Name" -type "string" "OpacityMaskTexture"; + setAttr ".OpacityMaskTexture_Type" -type "string" "texture"; + setAttr ".OpacityMaskTexture" -type "float3" 0 0 0 ; + setAttr ".OpacityMaskBias_Name" -type "string" "OpacityMaskBias"; + setAttr ".OpacityMaskBias_Type" -type "string" "float"; + setAttr -k on ".OpacityMaskBias" 0.10000000149011612; + setAttr ".UseSpecularTexture_Name" -type "string" "UseSpecularTexture"; + setAttr ".UseSpecularTexture_Type" -type "string" "bool"; + setAttr -k on ".UseSpecularTexture" no; + setAttr ".SpecularTexture_Name" -type "string" "SpecularTexture"; + setAttr ".SpecularTexture_Type" -type "string" "texture"; + setAttr ".SpecularTexture" -type "float3" 0 0 0 ; + setAttr ".SpecularColor_Name" -type "string" "SpecularColor"; + setAttr ".SpecularColor_Type" -type "string" "color1x3"; + setAttr -k on ".SpecularColor" -type "float3" 1 1 1 ; + setAttr ".UseNormalTexture_Name" -type "string" "UseNormalTexture"; + setAttr ".UseNormalTexture_Type" -type "string" "bool"; + setAttr -k on ".UseNormalTexture" yes; + setAttr ".NormalTexture_Name" -type "string" "NormalTexture"; + setAttr ".NormalTexture_Type" -type "string" "texture"; + setAttr ".NormalTexture" -type "float3" 0 0 0 ; + setAttr ".NormalHeight_Name" -type "string" "NormalHeight"; + setAttr ".NormalHeight_Type" -type "string" "float"; + setAttr -k on ".NormalHeight" 0.5; + setAttr ".SupportNonUniformScale_Name" -type "string" "SupportNonUniformScale"; + setAttr ".SupportNonUniformScale_Type" -type "string" "bool"; + setAttr -k on ".SupportNonUniformScale" yes; + setAttr ".NormalCoordsysX_Name" -type "string" "NormalCoordsysX"; + setAttr ".NormalCoordsysX_Type" -type "string" "enum"; + setAttr -k on ".NormalCoordsysX" 0; + setAttr ".NormalCoordsysY_Name" -type "string" "NormalCoordsysY"; + setAttr ".NormalCoordsysY_Type" -type "string" "enum"; + setAttr -k on ".NormalCoordsysY" 0; + setAttr ".DisplacementModel_Name" -type "string" "DisplacementModel"; + setAttr ".DisplacementModel_Type" -type "string" "enum"; + setAttr -k on ".DisplacementModel" 0; + setAttr ".UseDisplacementMap_Name" -type "string" "UseDisplacementMap"; + setAttr ".UseDisplacementMap_Type" -type "string" "bool"; + setAttr -k on ".UseDisplacementMap" no; + setAttr ".DisplacementTexture_Name" -type "string" "DisplacementTexture"; + setAttr ".DisplacementTexture_Type" -type "string" "texture"; + setAttr ".DisplacementTexture" -type "float3" 0 0 0 ; + setAttr ".VectorDisplacementCoordSys_Name" -type "string" "VectorDisplacementCoordSys"; + setAttr ".VectorDisplacementCoordSys_Type" -type "string" "enum"; + setAttr -k on ".VectorDisplacementCoordSys" 0; + setAttr ".DisplacementHeight_Name" -type "string" "DisplacementHeight"; + setAttr ".DisplacementHeight_Type" -type "string" "float"; + setAttr -k on ".DisplacementHeight" 0.5; + setAttr ".DisplacementOffset_Name" -type "string" "DisplacementOffset"; + setAttr ".DisplacementOffset_Type" -type "string" "float"; + setAttr -k on ".DisplacementOffset" 0.5; + setAttr ".DisplacementClippingBias_Name" -type "string" "DisplacementClippingBias"; + setAttr ".DisplacementClippingBias_Type" -type "string" "float"; + setAttr -k on ".DisplacementClippingBias" 5; + setAttr ".BBoxExtraScale_Name" -type "string" "BBoxExtraScale"; + setAttr ".BBoxExtraScale_Type" -type "string" "float"; + setAttr -k on ".BBoxExtraScale" 1; + setAttr ".TessellationRange_Name" -type "string" "TessellationRange"; + setAttr ".TessellationRange_Type" -type "string" "float"; + setAttr -k on ".TessellationRange" 0; + setAttr ".TessellationMin_Name" -type "string" "TessellationMin"; + setAttr ".TessellationMin_Type" -type "string" "float"; + setAttr -k on ".TessellationMin" 3; + setAttr ".FlatTessellation_Name" -type "string" "FlatTessellation"; + setAttr ".FlatTessellation_Type" -type "string" "float"; + setAttr -k on ".FlatTessellation" 0; + setAttr ".UseTranslucency_Name" -type "string" "UseTranslucency"; + setAttr ".UseTranslucency_Type" -type "string" "bool"; + setAttr -k on ".UseTranslucency" no; + setAttr ".UseThicknessTexture_Name" -type "string" "UseThicknessTexture"; + setAttr ".UseThicknessTexture_Type" -type "string" "bool"; + setAttr -k on ".UseThicknessTexture" no; + setAttr ".UseDiffuseIBLMap_Name" -type "string" "UseDiffuseIBLMap"; + setAttr ".UseDiffuseIBLMap_Type" -type "string" "bool"; + setAttr -k on ".UseDiffuseIBLMap" yes; + setAttr ".DiffuseIBLIntensity_Name" -type "string" "DiffuseIBLIntensity"; + setAttr ".DiffuseIBLIntensity_Type" -type "string" "float"; + setAttr -k on ".DiffuseIBLIntensity" 0.65499997138977051; + setAttr ".DiffuseTexcoord_Name" -type "string" "DiffuseTexcoord"; + setAttr ".DiffuseTexcoord_Type" -type "string" "enum"; + setAttr -k on ".DiffuseTexcoord" 0; + setAttr ".OpacityMaskTexcoord_Name" -type "string" "OpacityMaskTexcoord"; + setAttr ".OpacityMaskTexcoord_Type" -type "string" "enum"; + setAttr -k on ".OpacityMaskTexcoord" 0; + setAttr ".SpecularTexcoord_Name" -type "string" "SpecularTexcoord"; + setAttr ".SpecularTexcoord_Type" -type "string" "enum"; + setAttr -k on ".SpecularTexcoord" 0; + setAttr ".NormalTexcoord_Name" -type "string" "NormalTexcoord"; + setAttr ".NormalTexcoord_Type" -type "string" "enum"; + setAttr -k on ".NormalTexcoord" 0; + setAttr ".DisplacementTexcoord_Name" -type "string" "DisplacementTexcoord"; + setAttr ".DisplacementTexcoord_Type" -type "string" "enum"; + setAttr -k on ".DisplacementTexcoord" 0; + setAttr ".ThicknessTexcoord_Name" -type "string" "ThicknessTexcoord"; + setAttr ".ThicknessTexcoord_Type" -type "string" "enum"; + setAttr -k on ".ThicknessTexcoord" 0; + setAttr ".light0ShadowMap_Name" -type "string" "light0ShadowMap"; + setAttr ".light0ShadowMap_Type" -type "string" "texture"; + setAttr ".light0ShadowMap" -type "float3" 0 0 0 ; + setAttr ".light1ShadowMap_Name" -type "string" "light1ShadowMap"; + setAttr ".light1ShadowMap_Type" -type "string" "texture"; + setAttr ".light1ShadowMap" -type "float3" 0 0 0 ; + setAttr ".light2ShadowMap_Name" -type "string" "light2ShadowMap"; + setAttr ".light2ShadowMap_Type" -type "string" "texture"; + setAttr ".light2ShadowMap" -type "float3" 0 0 0 ; + setAttr ".screenSize_Name" -type "string" "screenSize"; + setAttr ".screenSize_Type" -type "string" "float1x2"; + setAttr ".screenSize" -type "float2" 0 0 ; + setAttr ".SkyRotation_Name" -type "string" "SkyRotation"; + setAttr ".SkyRotation_Type" -type "string" "float"; + setAttr -k on ".SkyRotation" 12.5; + setAttr ".DiffuseCubeIBL_Name" -type "string" "DiffuseCubeIBL"; + setAttr ".DiffuseCubeIBL_Type" -type "string" "texture"; + setAttr ".DiffuseCubeIBL" -type "float3" 0 0 0 ; + setAttr ".UseSpecCubeIBL_Name" -type "string" "UseSpecCubeIBL"; + setAttr ".UseSpecCubeIBL_Type" -type "string" "bool"; + setAttr -k on ".UseSpecCubeIBL" yes; + setAttr ".SpecularIBLIntensity_Name" -type "string" "SpecularIBLIntensity"; + setAttr ".SpecularIBLIntensity_Type" -type "string" "float"; + setAttr -k on ".SpecularIBLIntensity" 0.020999999716877937; + setAttr ".SpecularCubeIBL_Name" -type "string" "SpecularCubeIBL"; + setAttr ".SpecularCubeIBL_Type" -type "string" "texture"; + setAttr ".SpecularCubeIBL" -type "float3" 0 0 0 ; + setAttr ".LutTexture_Name" -type "string" "LutTexture"; + setAttr ".LutTexture_Type" -type "string" "texture"; + setAttr ".LutTexture" -type "float3" 0 0 0 ; + setAttr ".DitherTexture_Name" -type "string" "DitherTexture"; + setAttr ".DitherTexture_Type" -type "string" "texture"; + setAttr ".DitherTexture" -type "float3" 0 0 0 ; + setAttr ".skinCoeffX_Name" -type "string" "skinCoeffX"; + setAttr ".skinCoeffX_Type" -type "string" "float"; + setAttr -k on ".skinCoeffX" 0.79500001668930054; + setAttr ".skinCoeffY_Name" -type "string" "skinCoeffY"; + setAttr ".skinCoeffY_Type" -type "string" "float"; + setAttr -k on ".skinCoeffY" 0.28799998760223389; + setAttr ".skinCoeffZ_Name" -type "string" "skinCoeffZ"; + setAttr ".skinCoeffZ_Type" -type "string" "float"; + setAttr -k on ".skinCoeffZ" 0.030999999493360519; + setAttr ".NormalBlurring_Name" -type "string" "NormalBlurring"; + setAttr ".NormalBlurring_Type" -type "string" "float"; + setAttr -k on ".NormalBlurring" 1; + setAttr ".ScatteringRadiusTexture_Name" -type "string" "ScatteringRadiusTexture"; + setAttr ".ScatteringRadiusTexture_Type" -type "string" "texture"; + setAttr ".ScatteringRadiusTexture" -type "float3" 0 0 0 ; + setAttr ".UseScatteringRadiusTexture_Name" -type "string" "UseScatteringRadiusTexture"; + setAttr ".UseScatteringRadiusTexture_Type" -type "string" "bool"; + setAttr -k on ".UseScatteringRadiusTexture" no; + setAttr ".skinScattering_Name" -type "string" "skinScattering"; + setAttr ".skinScattering_Type" -type "string" "float"; + setAttr -k on ".skinScattering" 0.43700000643730164; + setAttr ".shadowBlur_Name" -type "string" "shadowBlur"; + setAttr ".shadowBlur_Type" -type "string" "float"; + setAttr -k on ".shadowBlur" 1; + setAttr ".shadowDither_Name" -type "string" "shadowDither"; + setAttr ".shadowDither_Type" -type "string" "float"; + setAttr -k on ".shadowDither" 0.086999997496604919; + setAttr ".shadowScattering_Name" -type "string" "shadowScattering"; + setAttr ".shadowScattering_Type" -type "string" "float"; + setAttr -k on ".shadowScattering" 1; + setAttr ".shadowSaturation_Name" -type "string" "shadowSaturation"; + setAttr ".shadowSaturation_Type" -type "string" "float"; + setAttr -k on ".shadowSaturation" 1.2740000486373901; + setAttr ".BackScatteringThicknessTexture_Name" -type "string" "BackScatteringThicknessTexture"; + setAttr ".BackScatteringThicknessTexture_Type" -type "string" "texture"; + setAttr ".BackScatteringThicknessTexture" -type "float3" 0 0 0 ; + setAttr ".skinScatteringRoughness_Name" -type "string" "skinScatteringRoughness"; + setAttr ".skinScatteringRoughness_Type" -type "string" "float"; + setAttr -k on ".skinScatteringRoughness" 1; + setAttr ".skinScatteringOuterColor_Name" -type "string" "skinScatteringOuterColor"; + setAttr ".skinScatteringOuterColor_Type" -type "string" "color1x3"; + setAttr -k on ".skinScatteringOuterColor" -type "float3" 0.39607844 0.039215688 + 0 ; + setAttr ".skinScatteringAmount_Name" -type "string" "skinScatteringAmount"; + setAttr ".skinScatteringAmount_Type" -type "string" "float"; + setAttr -k on ".skinScatteringAmount" 0.57599997520446777; + setAttr ".skinAmbientScatteringAmount_Name" -type "string" "skinAmbientScatteringAmount"; + setAttr ".skinAmbientScatteringAmount_Type" -type "string" "float"; + setAttr -k on ".skinAmbientScatteringAmount" 2.1779999732971191; + setAttr ".UseSpecularTextureAlpha_Name" -type "string" "UseSpecularTextureAlpha"; + setAttr ".UseSpecularTextureAlpha_Type" -type "string" "bool"; + setAttr -k on ".UseSpecularTextureAlpha" no; + setAttr ".LobeMix_Name" -type "string" "LobeMix"; + setAttr ".LobeMix_Type" -type "string" "float"; + setAttr -k on ".LobeMix" 0.77100002765655518; + setAttr ".Roughness_Name" -type "string" "Roughness"; + setAttr ".Roughness_Type" -type "string" "float"; + setAttr -k on ".Roughness" 0.31000000238418579; + setAttr ".OcclusionTexture_Name" -type "string" "OcclusionTexture"; + setAttr ".OcclusionTexture_Type" -type "string" "texture"; + setAttr ".OcclusionTexture" -type "float3" 0 0 0 ; + setAttr ".OcclusionAmount_Name" -type "string" "OcclusionAmount"; + setAttr ".OcclusionAmount_Type" -type "string" "float"; + setAttr -k on ".OcclusionAmount" 0.5; + setAttr ".UseCavityTexture_Name" -type "string" "UseCavityTexture"; + setAttr ".UseCavityTexture_Type" -type "string" "bool"; + setAttr -k on ".UseCavityTexture" no; + setAttr ".CavityTexture_Name" -type "string" "CavityTexture"; + setAttr ".CavityTexture_Type" -type "string" "texture"; + setAttr ".CavityTexture" -type "float3" 0 0 0 ; + setAttr ".CavityAmount_Name" -type "string" "CavityAmount"; + setAttr ".CavityAmount_Type" -type "string" "float"; + setAttr -k on ".CavityAmount" 1; + setAttr ".UseMicroCavityTexture_Name" -type "string" "UseMicroCavityTexture"; + setAttr ".UseMicroCavityTexture_Type" -type "string" "bool"; + setAttr -k on ".UseMicroCavityTexture" no; + setAttr ".MicroCavityTexture_Name" -type "string" "MicroCavityTexture"; + setAttr ".MicroCavityTexture_Type" -type "string" "texture"; + setAttr ".MicroCavityTexture" -type "float3" 0 0 0 ; + setAttr ".MicroCavityAmount_Name" -type "string" "MicroCavityAmount"; + setAttr ".MicroCavityAmount_Type" -type "string" "float"; + setAttr -k on ".MicroCavityAmount" 1; + setAttr ".UseMicroNormalTexture_Name" -type "string" "UseMicroNormalTexture"; + setAttr ".UseMicroNormalTexture_Type" -type "string" "bool"; + setAttr -k on ".UseMicroNormalTexture" no; + setAttr ".MicroNormalTexture_Name" -type "string" "MicroNormalTexture"; + setAttr ".MicroNormalTexture_Type" -type "string" "texture"; + setAttr ".MicroNormalTexture" -type "float3" 0 0 0 ; + setAttr ".MicroNormalHeight_Name" -type "string" "MicroNormalHeight"; + setAttr ".MicroNormalHeight_Type" -type "string" "float"; + setAttr -k on ".MicroNormalHeight" 1; + setAttr ".MicroScale_Name" -type "string" "MicroScale"; + setAttr ".MicroScale_Type" -type "string" "float"; + setAttr -k on ".MicroScale" 32; + setAttr ".UseBlendTexture_Name" -type "string" "UseBlendTexture"; + setAttr ".UseBlendTexture_Type" -type "string" "bool"; + setAttr -k on ".UseBlendTexture" no; + setAttr ".OcclusionTexcoord_Name" -type "string" "OcclusionTexcoord"; + setAttr ".OcclusionTexcoord_Type" -type "string" "enum"; + setAttr -k on ".OcclusionTexcoord" 1; + setAttr ".Position_Name" -type "string" "Position"; + setAttr ".Position_Source" -type "string" "position"; + setAttr ".TexCoord0_Name" -type "string" "TexCoord0"; + setAttr ".TexCoord0_Source" -type "string" "uv:map1"; + setAttr ".TexCoord0_DefaultTexture" -type "string" "DiffuseTexture"; + setAttr ".TexCoord1_Name" -type "string" "TexCoord1"; + setAttr ".TexCoord1_Source" -type "string" "uv:map2"; + setAttr ".TexCoord1_DefaultTexture" -type "string" "DiffuseTexture"; + setAttr ".TexCoord2_Name" -type "string" "TexCoord2"; + setAttr ".TexCoord2_Source" -type "string" "uv:map3"; + setAttr ".TexCoord2_DefaultTexture" -type "string" "DiffuseTexture"; + setAttr ".Normal_Name" -type "string" "Normal"; + setAttr ".Normal_Source" -type "string" "normal"; + setAttr ".Binormal0_Name" -type "string" "Binormal0"; + setAttr ".Binormal0_Source" -type "string" "binormal:map1"; + setAttr ".Tangent0_Name" -type "string" "Tangent0"; + setAttr ".Tangent0_Source" -type "string" "tangent:map1"; +createNode shadingEngine -n "shader_eyeLeft_shaderSG"; + rename -uid "C17F754C-45B3-2D7A-7542-938BA5AA9017"; + setAttr ".ihi" 0; + setAttr ".ro" yes; +createNode materialInfo -n "materialInfo4"; + rename -uid "86646D32-4A5C-56E1-D79F-6D9F200810B3"; +createNode dx11Shader -n "shader_eyeRight_shader"; + rename -uid "64831609-470E-C199-3F95-E78023FAB92B"; + addAttr -s false -is true -ci true -k true -sn "te" -ln "techniqueEnum" -nn "Technique" + -ct "HW_shader_parameter" -min 0 -max 2 -en "TessellationOFF" -at "enum"; + addAttr -ci true -sn "Light_0_use_implicit_lighting" -ln "Light_0_use_implicit_lighting" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -s false -ci true -sn "Light_0_connected_light" -ln "Light_0_connected_light" + -ct "HW_shader_parameter" -at "message"; + addAttr -ci true -sn "Light_1_use_implicit_lighting" -ln "Light_1_use_implicit_lighting" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -s false -ci true -sn "Light_1_connected_light" -ln "Light_1_connected_light" + -ct "HW_shader_parameter" -at "message"; + addAttr -ci true -sn "Light_2_use_implicit_lighting" -ln "Light_2_use_implicit_lighting" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -s false -ci true -sn "Light_2_connected_light" -ln "Light_2_connected_light" + -ct "HW_shader_parameter" -at "message"; + addAttr -is true -ci true -h true -sn "SuperFilterTaps_Name" -ln "SuperFilterTaps_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SuperFilterTaps_Type" -ln "SuperFilterTaps_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SuperFilterTaps" -ln "SuperFilterTaps" -ct "HW_shader_parameter" + -at "float2" -nc 2; + addAttr -is true -ci true -sn "SuperFilterTapsX" -ln "SuperFilterTapsX" -ct "HW_shader_parameter" + -dv -0.84052002429962158 -smn 0 -smx 1 -at "float" -p "SuperFilterTaps"; + addAttr -is true -ci true -sn "SuperFilterTapsY" -ln "SuperFilterTapsY" -ct "HW_shader_parameter" + -dv -0.073954001069068909 -smn 0 -smx 1 -at "float" -p "SuperFilterTaps"; + addAttr -is true -ci true -h true -sn "shadowMapTexelSize_Name" -ln "shadowMapTexelSize_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowMapTexelSize_Type" -ln "shadowMapTexelSize_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowMapTexelSize" -ln "shadowMapTexelSize" + -ct "HW_shader_parameter" -dv 0.0019531298894435167 -smn 0 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "LinearSpaceLighting_Name" -ln "LinearSpaceLighting_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "LinearSpaceLighting_Type" -ln "LinearSpaceLighting_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "LinearSpaceLighting" -ln "LinearSpaceLighting" + -nn "Linear Space Lighting" -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "UseShadows_Name" -ln "UseShadows_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "UseShadows_Type" -ln "UseShadows_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "UseShadows" -ln "UseShadows" -nn "Shadows" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "shadowMultiplier_Name" -ln "shadowMultiplier_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowMultiplier_Type" -ln "shadowMultiplier_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "shadowMultiplier" -ln "shadowMultiplier" + -nn "Shadow Strength" -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "float"; + addAttr -is true -ci true -h true -sn "IsSwatchRender_Name" -ln "IsSwatchRender_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "IsSwatchRender_Type" -ln "IsSwatchRender_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "IsSwatchRender" -ln "IsSwatchRender" -ct "HW_shader_parameter" + -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "shadowDepthBias_Name" -ln "shadowDepthBias_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowDepthBias_Type" -ln "shadowDepthBias_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "shadowDepthBias" -ln "shadowDepthBias" -nn "Shadow Bias" + -ct "HW_shader_parameter" -dv 0.0099999997764825821 -min 0 -smx 10 -at "float"; + addAttr -is true -ci true -h true -sn "MayaFullScreenGamma_Name" -ln "MayaFullScreenGamma_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "MayaFullScreenGamma_Type" -ln "MayaFullScreenGamma_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "MayaFullScreenGamma" -ln "MayaFullScreenGamma" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "flipBackfaceNormals_Name" -ln "flipBackfaceNormals_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "flipBackfaceNormals_Type" -ln "flipBackfaceNormals_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "flipBackfaceNormals" -ln "flipBackfaceNormals" + -nn "Double Sided Lighting" -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "light0Enable_Name" -ln "light0Enable_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0Enable_Type" -ln "light0Enable_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light0Enable" -ln "light0Enable" -nn "Enable Light 0" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "light0Type_Name" -ln "light0Type_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light0Type_Type" -ln "light0Type_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light0Type" -ln "light0Type" -nn "Light 0 Type" + -ct "HW_shader_parameter" -dv 2 -min 0 -max 5 -smn 0 -smx 1 -en "None:Default:Spot:Point:Directional:Ambient" + -at "enum"; + addAttr -is true -ci true -h true -sn "light0Pos_Name" -ln "light0Pos_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light0Pos_Type" -ln "light0Pos_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light0Pos" -ln "light0Pos" -nn "Light 0 Position" + -ct "HW_shader_parameter" -at "matrix"; + addAttr -is true -ci true -h true -sn "light0Color_Name" -ln "light0Color_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0Color_Type" -ln "light0Color_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -k true -sn "light0Color" -ln "light0Color" -nn "Light 0 Color" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "light0ColorR" -ln "light0ColorR" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light0Color"; + addAttr -is true -ci true -sn "light0ColorG" -ln "light0ColorG" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light0Color"; + addAttr -is true -ci true -sn "light0ColorB" -ln "light0ColorB" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light0Color"; + addAttr -is true -ci true -h true -sn "light0Intensity_Name" -ln "light0Intensity_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0Intensity_Type" -ln "light0Intensity_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light0Intensity" -ln "light0Intensity" -nn "Light 0 Intensity" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -at "float"; + addAttr -is true -ci true -h true -sn "light0Dir_Name" -ln "light0Dir_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light0Dir_Type" -ln "light0Dir_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light0Dir" -ln "light0Dir" -nn "Light 0 Direction" + -ct "HW_shader_parameter" -at "matrix"; + addAttr -is true -ci true -h true -sn "light0ConeAngle_Name" -ln "light0ConeAngle_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0ConeAngle_Type" -ln "light0ConeAngle_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light0ConeAngle" -ln "light0ConeAngle" -nn "Light 0 Cone Angle" + -ct "HW_shader_parameter" -dv 0.46000000834465027 -min 0 -max 1.5707962512969971 + -at "float"; + addAttr -is true -ci true -h true -sn "light0FallOff_Name" -ln "light0FallOff_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0FallOff_Type" -ln "light0FallOff_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light0FallOff" -ln "light0FallOff" -nn "Light 0 Penumbra Angle" + -ct "HW_shader_parameter" -dv 0.69999998807907104 -min 0 -max 1.5707962512969971 + -at "float"; + addAttr -is true -ci true -h true -sn "light0AttenScale_Name" -ln "light0AttenScale_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0AttenScale_Type" -ln "light0AttenScale_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light0AttenScale" -ln "light0AttenScale" + -nn "Light 0 Decay" -ct "HW_shader_parameter" -min 0 -max 99999 -at "float"; + addAttr -is true -ci true -h true -sn "light0ShadowOn_Name" -ln "light0ShadowOn_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0ShadowOn_Type" -ln "light0ShadowOn_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0ShadowOn" -ln "light0ShadowOn" -nn "Light 0 Casts Shadow" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "light1Enable_Name" -ln "light1Enable_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1Enable_Type" -ln "light1Enable_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light1Enable" -ln "light1Enable" -nn "Enable Light 1" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "light1Type_Name" -ln "light1Type_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light1Type_Type" -ln "light1Type_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light1Type" -ln "light1Type" -nn "Light 1 Type" + -ct "HW_shader_parameter" -dv 2 -min 0 -max 5 -smn 0 -smx 1 -en "None:Default:Spot:Point:Directional:Ambient" + -at "enum"; + addAttr -is true -ci true -h true -sn "light1Pos_Name" -ln "light1Pos_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light1Pos_Type" -ln "light1Pos_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light1Pos" -ln "light1Pos" -nn "Light 1 Position" + -ct "HW_shader_parameter" -at "matrix"; + addAttr -is true -ci true -h true -sn "light1Color_Name" -ln "light1Color_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1Color_Type" -ln "light1Color_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -k true -sn "light1Color" -ln "light1Color" -nn "Light 1 Color" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "light1ColorR" -ln "light1ColorR" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light1Color"; + addAttr -is true -ci true -sn "light1ColorG" -ln "light1ColorG" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light1Color"; + addAttr -is true -ci true -sn "light1ColorB" -ln "light1ColorB" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light1Color"; + addAttr -is true -ci true -h true -sn "light1Intensity_Name" -ln "light1Intensity_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1Intensity_Type" -ln "light1Intensity_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light1Intensity" -ln "light1Intensity" -nn "Light 1 Intensity" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -at "float"; + addAttr -is true -ci true -h true -sn "light1Dir_Name" -ln "light1Dir_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light1Dir_Type" -ln "light1Dir_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light1Dir" -ln "light1Dir" -nn "Light 1 Direction" + -ct "HW_shader_parameter" -at "matrix"; + addAttr -is true -ci true -h true -sn "light1ConeAngle_Name" -ln "light1ConeAngle_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1ConeAngle_Type" -ln "light1ConeAngle_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light1ConeAngle" -ln "light1ConeAngle" -nn "Light 1 Cone Angle" + -ct "HW_shader_parameter" -min 0 -max 1.5707962512969971 -at "float"; + addAttr -is true -ci true -h true -sn "light1FallOff_Name" -ln "light1FallOff_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1FallOff_Type" -ln "light1FallOff_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light1FallOff" -ln "light1FallOff" -nn "Light 1 Penumbra Angle" + -ct "HW_shader_parameter" -min 0 -max 1.5707962512969971 -at "float"; + addAttr -is true -ci true -h true -sn "light1AttenScale_Name" -ln "light1AttenScale_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1AttenScale_Type" -ln "light1AttenScale_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light1AttenScale" -ln "light1AttenScale" + -nn "Light 1 Decay" -ct "HW_shader_parameter" -min 0 -max 99999 -at "float"; + addAttr -is true -ci true -h true -sn "light1ShadowOn_Name" -ln "light1ShadowOn_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1ShadowOn_Type" -ln "light1ShadowOn_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1ShadowOn" -ln "light1ShadowOn" -nn "Light 1 Casts Shadow" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "light2Enable_Name" -ln "light2Enable_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2Enable_Type" -ln "light2Enable_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light2Enable" -ln "light2Enable" -nn "Enable Light 2" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "light2Type_Name" -ln "light2Type_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light2Type_Type" -ln "light2Type_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light2Type" -ln "light2Type" -nn "Light 2 Type" + -ct "HW_shader_parameter" -dv 2 -min 0 -max 5 -smn 0 -smx 1 -en "None:Default:Spot:Point:Directional:Ambient" + -at "enum"; + addAttr -is true -ci true -h true -sn "light2Pos_Name" -ln "light2Pos_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light2Pos_Type" -ln "light2Pos_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light2Pos" -ln "light2Pos" -nn "Light 2 Position" + -ct "HW_shader_parameter" -at "matrix"; + addAttr -is true -ci true -h true -sn "light2Color_Name" -ln "light2Color_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2Color_Type" -ln "light2Color_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -k true -sn "light2Color" -ln "light2Color" -nn "Light 2 Color" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "light2ColorR" -ln "light2ColorR" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light2Color"; + addAttr -is true -ci true -sn "light2ColorG" -ln "light2ColorG" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light2Color"; + addAttr -is true -ci true -sn "light2ColorB" -ln "light2ColorB" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "light2Color"; + addAttr -is true -ci true -h true -sn "light2Intensity_Name" -ln "light2Intensity_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2Intensity_Type" -ln "light2Intensity_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light2Intensity" -ln "light2Intensity" -nn "Light 2 Intensity" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -at "float"; + addAttr -is true -ci true -h true -sn "light2Dir_Name" -ln "light2Dir_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "light2Dir_Type" -ln "light2Dir_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "light2Dir" -ln "light2Dir" -nn "Light 2 Direction" + -ct "HW_shader_parameter" -at "matrix"; + addAttr -is true -ci true -h true -sn "light2ConeAngle_Name" -ln "light2ConeAngle_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2ConeAngle_Type" -ln "light2ConeAngle_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light2ConeAngle" -ln "light2ConeAngle" -nn "Light 2 Cone Angle" + -ct "HW_shader_parameter" -min 0 -max 1.5707962512969971 -at "float"; + addAttr -is true -ci true -h true -sn "light2FallOff_Name" -ln "light2FallOff_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2FallOff_Type" -ln "light2FallOff_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light2FallOff" -ln "light2FallOff" -nn "Light 2 Penumbra Angle" + -ct "HW_shader_parameter" -min 0 -max 1.5707962512969971 -at "float"; + addAttr -is true -ci true -h true -sn "light2AttenScale_Name" -ln "light2AttenScale_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2AttenScale_Type" -ln "light2AttenScale_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "light2AttenScale" -ln "light2AttenScale" + -nn "Light 2 Decay" -ct "HW_shader_parameter" -min 0 -max 99999 -at "float"; + addAttr -is true -ci true -h true -sn "light2ShadowOn_Name" -ln "light2ShadowOn_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2ShadowOn_Type" -ln "light2ShadowOn_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2ShadowOn" -ln "light2ShadowOn" -nn "Light 2 Casts Shadow" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "UseAmbientOcclusionTexture_Name" -ln "UseAmbientOcclusionTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseAmbientOcclusionTexture_Type" -ln "UseAmbientOcclusionTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseAmbientOcclusionTexture" -ln "UseAmbientOcclusionTexture" + -nn "Use Occlusion Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "transpDepthTexture_Name" -ln "transpDepthTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "transpDepthTexture_Type" -ln "transpDepthTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -h true -sn "transpDepthTexture" -ln "transpDepthTexture" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "transpDepthTextureR" -ln "transpDepthTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "transpDepthTexture"; + addAttr -is true -ci true -sn "transpDepthTextureG" -ln "transpDepthTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "transpDepthTexture"; + addAttr -is true -ci true -sn "transpDepthTextureB" -ln "transpDepthTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "transpDepthTexture"; + addAttr -is true -ci true -h true -sn "opaqueDepthTexture_Name" -ln "opaqueDepthTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "opaqueDepthTexture_Type" -ln "opaqueDepthTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -h true -sn "opaqueDepthTexture" -ln "opaqueDepthTexture" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "opaqueDepthTextureR" -ln "opaqueDepthTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "opaqueDepthTexture"; + addAttr -is true -ci true -sn "opaqueDepthTextureG" -ln "opaqueDepthTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "opaqueDepthTexture"; + addAttr -is true -ci true -sn "opaqueDepthTextureB" -ln "opaqueDepthTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "opaqueDepthTexture"; + addAttr -is true -ci true -h true -sn "UseDiffuseTexture_Name" -ln "UseDiffuseTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseDiffuseTexture_Type" -ln "UseDiffuseTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseDiffuseTexture" -ln "UseDiffuseTexture" + -nn "Use Diffuse Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "UseDiffuseTextureAlpha_Name" -ln "UseDiffuseTextureAlpha_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseDiffuseTextureAlpha_Type" -ln "UseDiffuseTextureAlpha_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseDiffuseTextureAlpha" -ln "UseDiffuseTextureAlpha" + -nn "Use Diffuse Map Alpha" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "DiffuseTexture_Name" -ln "DiffuseTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DiffuseTexture_Type" -ln "DiffuseTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "DiffuseTexture" -ln "DiffuseTexture" -nn "Diffuse Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "DiffuseTextureR" -ln "DiffuseTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DiffuseTexture"; + addAttr -is true -ci true -sn "DiffuseTextureG" -ln "DiffuseTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DiffuseTexture"; + addAttr -is true -ci true -sn "DiffuseTextureB" -ln "DiffuseTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DiffuseTexture"; + addAttr -is true -ci true -h true -sn "DiffuseColor_Name" -ln "DiffuseColor_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DiffuseColor_Type" -ln "DiffuseColor_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -k true -sn "DiffuseColor" -ln "DiffuseColor" -nn "Diffuse Color" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "DiffuseColorR" -ln "DiffuseColorR" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "DiffuseColor"; + addAttr -is true -ci true -sn "DiffuseColorG" -ln "DiffuseColorG" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "DiffuseColor"; + addAttr -is true -ci true -sn "DiffuseColorB" -ln "DiffuseColorB" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "DiffuseColor"; + addAttr -is true -ci true -h true -sn "Opacity_Name" -ln "Opacity_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "Opacity_Type" -ln "Opacity_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "Opacity" -ln "Opacity" -nn "Opacity" -ct "HW_shader_parameter" + -dv 1 -min 0 -max 1 -at "float"; + addAttr -is true -ci true -h true -sn "UseOpacityMaskTexture_Name" -ln "UseOpacityMaskTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseOpacityMaskTexture_Type" -ln "UseOpacityMaskTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseOpacityMaskTexture" -ln "UseOpacityMaskTexture" + -nn "Opacity Mask" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "OpacityMaskTexture_Name" -ln "OpacityMaskTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "OpacityMaskTexture_Type" -ln "OpacityMaskTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "OpacityMaskTexture" -ln "OpacityMaskTexture" + -nn "Opacity Mask" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "OpacityMaskTextureR" -ln "OpacityMaskTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "OpacityMaskTexture"; + addAttr -is true -ci true -sn "OpacityMaskTextureG" -ln "OpacityMaskTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "OpacityMaskTexture"; + addAttr -is true -ci true -sn "OpacityMaskTextureB" -ln "OpacityMaskTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "OpacityMaskTexture"; + addAttr -is true -ci true -h true -sn "OpacityMaskBias_Name" -ln "OpacityMaskBias_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "OpacityMaskBias_Type" -ln "OpacityMaskBias_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "OpacityMaskBias" -ln "OpacityMaskBias" -nn "Opacity Mask Bias" + -ct "HW_shader_parameter" -dv 0.10000000149011612 -min 0 -max 1 -at "float"; + addAttr -is true -ci true -h true -sn "UseSpecularTexture_Name" -ln "UseSpecularTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseSpecularTexture_Type" -ln "UseSpecularTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseSpecularTexture" -ln "UseSpecularTexture" + -nn "Use Specular Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "SpecularTexture_Name" -ln "SpecularTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SpecularTexture_Type" -ln "SpecularTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "SpecularTexture" -ln "SpecularTexture" -nn "Specular Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "SpecularTextureR" -ln "SpecularTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "SpecularTexture"; + addAttr -is true -ci true -sn "SpecularTextureG" -ln "SpecularTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "SpecularTexture"; + addAttr -is true -ci true -sn "SpecularTextureB" -ln "SpecularTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "SpecularTexture"; + addAttr -is true -ci true -h true -sn "SpecularColor_Name" -ln "SpecularColor_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SpecularColor_Type" -ln "SpecularColor_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -k true -sn "SpecularColor" -ln "SpecularColor" -nn "Specular Color" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "SpecularColorR" -ln "SpecularColorR" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "SpecularColor"; + addAttr -is true -ci true -sn "SpecularColorG" -ln "SpecularColorG" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "SpecularColor"; + addAttr -is true -ci true -sn "SpecularColorB" -ln "SpecularColorB" -ct "HW_shader_parameter" + -dv 1 -smn 0 -smx 1 -at "float" -p "SpecularColor"; + addAttr -is true -ci true -h true -sn "UseNormalTexture_Name" -ln "UseNormalTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseNormalTexture_Type" -ln "UseNormalTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseNormalTexture" -ln "UseNormalTexture" + -nn "Use Normal Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "NormalTexture_Name" -ln "NormalTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "NormalTexture_Type" -ln "NormalTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "NormalTexture" -ln "NormalTexture" -nn "Normal Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "NormalTextureR" -ln "NormalTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "NormalTexture"; + addAttr -is true -ci true -sn "NormalTextureG" -ln "NormalTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "NormalTexture"; + addAttr -is true -ci true -sn "NormalTextureB" -ln "NormalTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "NormalTexture"; + addAttr -is true -ci true -h true -sn "NormalHeight_Name" -ln "NormalHeight_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "NormalHeight_Type" -ln "NormalHeight_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "NormalHeight" -ln "NormalHeight" -nn "Normal Height" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -smx 5 -at "float"; + addAttr -is true -ci true -h true -sn "SupportNonUniformScale_Name" -ln "SupportNonUniformScale_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SupportNonUniformScale_Type" -ln "SupportNonUniformScale_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "SupportNonUniformScale" -ln "SupportNonUniformScale" + -nn "Support Non-Uniform Scale" -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "NormalCoordsysX_Name" -ln "NormalCoordsysX_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "NormalCoordsysX_Type" -ln "NormalCoordsysX_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "NormalCoordsysX" -ln "NormalCoordsysX" -nn "Normal X (Red)" + -ct "HW_shader_parameter" -min 0 -max 1 -smn 0 -smx 1 -en "Positive:Negative" -at "enum"; + addAttr -is true -ci true -h true -sn "NormalCoordsysY_Name" -ln "NormalCoordsysY_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "NormalCoordsysY_Type" -ln "NormalCoordsysY_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "NormalCoordsysY" -ln "NormalCoordsysY" -nn "Normal Y (Green)" + -ct "HW_shader_parameter" -min 0 -max 1 -smn 0 -smx 1 -en "Positive:Negative" -at "enum"; + addAttr -is true -ci true -h true -sn "DisplacementModel_Name" -ln "DisplacementModel_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DisplacementModel_Type" -ln "DisplacementModel_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DisplacementModel" -ln "DisplacementModel" + -nn "Displacement Model" -ct "HW_shader_parameter" -min 0 -max 1 -smn 0 -smx 1 -en + "Grayscale:Tangent Vector" -at "enum"; + addAttr -is true -ci true -h true -sn "UseDisplacementMap_Name" -ln "UseDisplacementMap_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseDisplacementMap_Type" -ln "UseDisplacementMap_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseDisplacementMap" -ln "UseDisplacementMap" + -nn "Displacement Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "DisplacementTexture_Name" -ln "DisplacementTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DisplacementTexture_Type" -ln "DisplacementTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "DisplacementTexture" -ln "DisplacementTexture" + -nn "Displacement Map" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "DisplacementTextureR" -ln "DisplacementTextureR" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "DisplacementTexture"; + addAttr -is true -ci true -sn "DisplacementTextureG" -ln "DisplacementTextureG" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "DisplacementTexture"; + addAttr -is true -ci true -sn "DisplacementTextureB" -ln "DisplacementTextureB" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "DisplacementTexture"; + addAttr -is true -ci true -h true -sn "VectorDisplacementCoordSys_Name" -ln "VectorDisplacementCoordSys_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "VectorDisplacementCoordSys_Type" -ln "VectorDisplacementCoordSys_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "VectorDisplacementCoordSys" -ln "VectorDisplacementCoordSys" + -nn "Displacement Coordsys" -ct "HW_shader_parameter" -min 0 -max 1 -smn 0 -smx 1 + -en "Mudbox (XZY):Maya (XYZ)" -at "enum"; + addAttr -is true -ci true -h true -sn "DisplacementHeight_Name" -ln "DisplacementHeight_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DisplacementHeight_Type" -ln "DisplacementHeight_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DisplacementHeight" -ln "DisplacementHeight" + -nn "Displacement Height" -ct "HW_shader_parameter" -dv 0.5 -min -99999 -max 99999 + -smn 0 -smx 10 -at "float"; + addAttr -is true -ci true -h true -sn "DisplacementOffset_Name" -ln "DisplacementOffset_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DisplacementOffset_Type" -ln "DisplacementOffset_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DisplacementOffset" -ln "DisplacementOffset" + -nn "Displacement Offset" -ct "HW_shader_parameter" -dv 0.5 -min -99999 -max 99999 + -smn -1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "DisplacementClippingBias_Name" -ln "DisplacementClippingBias_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DisplacementClippingBias_Type" -ln "DisplacementClippingBias_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DisplacementClippingBias" -ln "DisplacementClippingBias" + -nn "Displacement Clipping Bias" -ct "HW_shader_parameter" -dv 5 -min -99999 -max + 99999 -smn 0 -smx 99 -at "float"; + addAttr -is true -ci true -h true -sn "BBoxExtraScale_Name" -ln "BBoxExtraScale_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "BBoxExtraScale_Type" -ln "BBoxExtraScale_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "BBoxExtraScale" -ln "BBoxExtraScale" -nn "Bounding Box Extra Scale" + -ct "HW_shader_parameter" -dv 1 -min 1 -max 99999 -smx 10 -at "float"; + addAttr -is true -ci true -h true -sn "TessellationRange_Name" -ln "TessellationRange_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "TessellationRange_Type" -ln "TessellationRange_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "TessellationRange" -ln "TessellationRange" + -nn "Tessellation Range" -ct "HW_shader_parameter" -min 0 -max 99999 -smx 999 -at "float"; + addAttr -is true -ci true -h true -sn "TessellationMin_Name" -ln "TessellationMin_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "TessellationMin_Type" -ln "TessellationMin_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "TessellationMin" -ln "TessellationMin" -nn "Tessellation Minimum" + -ct "HW_shader_parameter" -dv 3 -min 1 -max 99999 -smx 10 -at "float"; + addAttr -is true -ci true -h true -sn "FlatTessellation_Name" -ln "FlatTessellation_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "FlatTessellation_Type" -ln "FlatTessellation_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "FlatTessellation" -ln "FlatTessellation" + -nn "Flat Tessellation" -ct "HW_shader_parameter" -min 0 -max 1 -at "float"; + addAttr -is true -ci true -h true -sn "UseTranslucency_Name" -ln "UseTranslucency_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseTranslucency_Type" -ln "UseTranslucency_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseTranslucency" -ln "UseTranslucency" -nn "Back Scattering" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "UseThicknessTexture_Name" -ln "UseThicknessTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseThicknessTexture_Type" -ln "UseThicknessTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseThicknessTexture" -ln "UseThicknessTexture" + -nn "Use Thickness Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "UseDiffuseIBLMap_Name" -ln "UseDiffuseIBLMap_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseDiffuseIBLMap_Type" -ln "UseDiffuseIBLMap_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseDiffuseIBLMap" -ln "UseDiffuseIBLMap" + -nn "Use Diffuse Cubemap" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "DiffuseIBLIntensity_Name" -ln "DiffuseIBLIntensity_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DiffuseIBLIntensity_Type" -ln "DiffuseIBLIntensity_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DiffuseIBLIntensity" -ln "DiffuseIBLIntensity" + -nn "Diffuse IBL Intensity" -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -smx + 2 -at "float"; + addAttr -is true -ci true -h true -sn "DiffuseTexcoord_Name" -ln "DiffuseTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DiffuseTexcoord_Type" -ln "DiffuseTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DiffuseTexcoord" -ln "DiffuseTexcoord" -nn "Diffuse Map UV" + -ct "HW_shader_parameter" -min 0 -max 2 -smn 0 -smx 1 -en "TexCoord0:TexCoord1:TexCoord2" + -at "enum"; + addAttr -is true -ci true -h true -sn "OpacityMaskTexcoord_Name" -ln "OpacityMaskTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "OpacityMaskTexcoord_Type" -ln "OpacityMaskTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "OpacityMaskTexcoord" -ln "OpacityMaskTexcoord" + -nn "Opacity Mask UV" -ct "HW_shader_parameter" -min 0 -max 2 -smn 0 -smx 1 -en "TexCoord0:TexCoord1:TexCoord2" + -at "enum"; + addAttr -is true -ci true -h true -sn "SpecularTexcoord_Name" -ln "SpecularTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SpecularTexcoord_Type" -ln "SpecularTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "SpecularTexcoord" -ln "SpecularTexcoord" + -nn "Specular Map UV" -ct "HW_shader_parameter" -min 0 -max 2 -smn 0 -smx 1 -en "TexCoord0:TexCoord1:TexCoord2" + -at "enum"; + addAttr -is true -ci true -h true -sn "NormalTexcoord_Name" -ln "NormalTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "NormalTexcoord_Type" -ln "NormalTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "NormalTexcoord" -ln "NormalTexcoord" -nn "Normal Map UV" + -ct "HW_shader_parameter" -min 0 -max 2 -smn 0 -smx 1 -en "TexCoord0:TexCoord1:TexCoord2" + -at "enum"; + addAttr -is true -ci true -h true -sn "DisplacementTexcoord_Name" -ln "DisplacementTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DisplacementTexcoord_Type" -ln "DisplacementTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "DisplacementTexcoord" -ln "DisplacementTexcoord" + -nn "Displacement Map UV" -ct "HW_shader_parameter" -min 0 -max 2 -smn 0 -smx 1 -en + "TexCoord0:TexCoord1:TexCoord2" -at "enum"; + addAttr -is true -ci true -h true -sn "ThicknessTexcoord_Name" -ln "ThicknessTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "ThicknessTexcoord_Type" -ln "ThicknessTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "ThicknessTexcoord" -ln "ThicknessTexcoord" + -nn "Translucency Mask UV" -ct "HW_shader_parameter" -min 0 -max 2 -smn 0 -smx 1 + -en "TexCoord0:TexCoord1:TexCoord2" -at "enum"; + addAttr -is true -ci true -h true -sn "light0ShadowMap_Name" -ln "light0ShadowMap_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light0ShadowMap_Type" -ln "light0ShadowMap_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -h true -sn "light0ShadowMap" -ln "light0ShadowMap" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "light0ShadowMapR" -ln "light0ShadowMapR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light0ShadowMap"; + addAttr -is true -ci true -sn "light0ShadowMapG" -ln "light0ShadowMapG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light0ShadowMap"; + addAttr -is true -ci true -sn "light0ShadowMapB" -ln "light0ShadowMapB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light0ShadowMap"; + addAttr -is true -ci true -h true -sn "light1ShadowMap_Name" -ln "light1ShadowMap_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light1ShadowMap_Type" -ln "light1ShadowMap_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -h true -sn "light1ShadowMap" -ln "light1ShadowMap" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "light1ShadowMapR" -ln "light1ShadowMapR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light1ShadowMap"; + addAttr -is true -ci true -sn "light1ShadowMapG" -ln "light1ShadowMapG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light1ShadowMap"; + addAttr -is true -ci true -sn "light1ShadowMapB" -ln "light1ShadowMapB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light1ShadowMap"; + addAttr -is true -ci true -h true -sn "light2ShadowMap_Name" -ln "light2ShadowMap_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "light2ShadowMap_Type" -ln "light2ShadowMap_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -h true -sn "light2ShadowMap" -ln "light2ShadowMap" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "light2ShadowMapR" -ln "light2ShadowMapR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light2ShadowMap"; + addAttr -is true -ci true -sn "light2ShadowMapG" -ln "light2ShadowMapG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light2ShadowMap"; + addAttr -is true -ci true -sn "light2ShadowMapB" -ln "light2ShadowMapB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "light2ShadowMap"; + addAttr -is true -ci true -h true -sn "screenSize_Name" -ln "screenSize_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "screenSize_Type" -ln "screenSize_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "screenSize" -ln "screenSize" -ct "HW_shader_parameter" + -at "float2" -nc 2; + addAttr -is true -ci true -sn "screenSizeX" -ln "screenSizeX" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "screenSize"; + addAttr -is true -ci true -sn "screenSizeY" -ln "screenSizeY" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "screenSize"; + addAttr -is true -ci true -h true -sn "SkyRotation_Name" -ln "SkyRotation_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SkyRotation_Type" -ln "SkyRotation_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "SkyRotation" -ln "SkyRotation" -nn "Sky Rotation" + -ct "HW_shader_parameter" -min 0 -max 99999 -smn 0 -smx 360 -at "float"; + addAttr -is true -ci true -h true -sn "DiffuseCubeIBL_Name" -ln "DiffuseCubeIBL_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DiffuseCubeIBL_Type" -ln "DiffuseCubeIBL_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "DiffuseCubeIBL" -ln "DiffuseCubeIBL" -nn "Diffuse Cubemap" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "DiffuseCubeIBLR" -ln "DiffuseCubeIBLR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DiffuseCubeIBL"; + addAttr -is true -ci true -sn "DiffuseCubeIBLG" -ln "DiffuseCubeIBLG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DiffuseCubeIBL"; + addAttr -is true -ci true -sn "DiffuseCubeIBLB" -ln "DiffuseCubeIBLB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DiffuseCubeIBL"; + addAttr -is true -ci true -h true -sn "UseSpecCubeIBL_Name" -ln "UseSpecCubeIBL_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseSpecCubeIBL_Type" -ln "UseSpecCubeIBL_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseSpecCubeIBL" -ln "UseSpecCubeIBL" -nn "Use Specular Cubemap" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "SpecularIBLIntensity_Name" -ln "SpecularIBLIntensity_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SpecularIBLIntensity_Type" -ln "SpecularIBLIntensity_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "SpecularIBLIntensity" -ln "SpecularIBLIntensity" + -nn "Specular IBL Intensity" -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -smx + 2 -at "float"; + addAttr -is true -ci true -h true -sn "SpecularCubeIBL_Name" -ln "SpecularCubeIBL_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "SpecularCubeIBL_Type" -ln "SpecularCubeIBL_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "SpecularCubeIBL" -ln "SpecularCubeIBL" -nn "Specular Cubemap" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "SpecularCubeIBLR" -ln "SpecularCubeIBLR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "SpecularCubeIBL"; + addAttr -is true -ci true -sn "SpecularCubeIBLG" -ln "SpecularCubeIBLG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "SpecularCubeIBL"; + addAttr -is true -ci true -sn "SpecularCubeIBLB" -ln "SpecularCubeIBLB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "SpecularCubeIBL"; + addAttr -is true -ci true -h true -sn "LutTexture_Name" -ln "LutTexture_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "LutTexture_Type" -ln "LutTexture_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -uac -sn "LutTexture" -ln "LutTexture" -nn "SSS LUT Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "LutTextureR" -ln "LutTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "LutTexture"; + addAttr -is true -ci true -sn "LutTextureG" -ln "LutTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "LutTexture"; + addAttr -is true -ci true -sn "LutTextureB" -ln "LutTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "LutTexture"; + addAttr -is true -ci true -h true -sn "DitherTexture_Name" -ln "DitherTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "DitherTexture_Type" -ln "DitherTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "DitherTexture" -ln "DitherTexture" -nn "SSS Dither Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "DitherTextureR" -ln "DitherTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DitherTexture"; + addAttr -is true -ci true -sn "DitherTextureG" -ln "DitherTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DitherTexture"; + addAttr -is true -ci true -sn "DitherTextureB" -ln "DitherTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "DitherTexture"; + addAttr -is true -ci true -h true -sn "skinCoeffX_Name" -ln "skinCoeffX_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "skinCoeffX_Type" -ln "skinCoeffX_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "skinCoeffX" -ln "skinCoeffX" -nn "SSS Coeffient R" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "skinCoeffY_Name" -ln "skinCoeffY_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "skinCoeffY_Type" -ln "skinCoeffY_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "skinCoeffY" -ln "skinCoeffY" -nn "SSS Coeffient G" + -ct "HW_shader_parameter" -dv 0.5 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "skinCoeffZ_Name" -ln "skinCoeffZ_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "skinCoeffZ_Type" -ln "skinCoeffZ_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "skinCoeffZ" -ln "skinCoeffZ" -nn "SSS Coeffient B" + -ct "HW_shader_parameter" -dv 0.25 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "NormalBlurring_Name" -ln "NormalBlurring_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "NormalBlurring_Type" -ln "NormalBlurring_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "NormalBlurring" -ln "NormalBlurring" -nn "SSS Softness" + -ct "HW_shader_parameter" -dv 0.25 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "ScatteringRadiusTexture_Name" -ln "ScatteringRadiusTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "ScatteringRadiusTexture_Type" -ln "ScatteringRadiusTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "ScatteringRadiusTexture" -ln "ScatteringRadiusTexture" + -nn "SSS Radius Map" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "ScatteringRadiusTextureR" -ln "ScatteringRadiusTextureR" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "ScatteringRadiusTexture"; + addAttr -is true -ci true -sn "ScatteringRadiusTextureG" -ln "ScatteringRadiusTextureG" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "ScatteringRadiusTexture"; + addAttr -is true -ci true -sn "ScatteringRadiusTextureB" -ln "ScatteringRadiusTextureB" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "ScatteringRadiusTexture"; + addAttr -is true -ci true -h true -sn "UseScatteringRadiusTexture_Name" -ln "UseScatteringRadiusTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseScatteringRadiusTexture_Type" -ln "UseScatteringRadiusTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseScatteringRadiusTexture" -ln "UseScatteringRadiusTexture" + -nn "Use SSS Radius Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "skinScattering_Name" -ln "skinScattering_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "skinScattering_Type" -ln "skinScattering_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "skinScattering" -ln "skinScattering" -nn "SSS Radius" + -ct "HW_shader_parameter" -dv 0.25 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "shadowBlur_Name" -ln "shadowBlur_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "shadowBlur_Type" -ln "shadowBlur_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "shadowBlur" -ln "shadowBlur" -nn "SSS Shadow Blur" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "shadowDither_Name" -ln "shadowDither_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowDither_Type" -ln "shadowDither_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "shadowDither" -ln "shadowDither" -nn "SSS Shadow Dither" + -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "shadowScattering_Name" -ln "shadowScattering_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowScattering_Type" -ln "shadowScattering_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "shadowScattering" -ln "shadowScattering" + -nn "SSS Shadow Scattering" -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -smx 1 + -at "float"; + addAttr -is true -ci true -h true -sn "shadowSaturation_Name" -ln "shadowSaturation_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "shadowSaturation_Type" -ln "shadowSaturation_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "shadowSaturation" -ln "shadowSaturation" + -nn "SSS Shadow Saturation" -ct "HW_shader_parameter" -dv 1 -min 0 -max 4 -smx 4 + -at "float"; + addAttr -is true -ci true -h true -sn "BackScatteringThicknessTexture_Name" -ln "BackScatteringThicknessTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "BackScatteringThicknessTexture_Type" -ln "BackScatteringThicknessTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "BackScatteringThicknessTexture" -ln "BackScatteringThicknessTexture" + -nn "Thickness Map" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "BackScatteringThicknessTextureR" -ln "BackScatteringThicknessTextureR" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "BackScatteringThicknessTexture"; + addAttr -is true -ci true -sn "BackScatteringThicknessTextureG" -ln "BackScatteringThicknessTextureG" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "BackScatteringThicknessTexture"; + addAttr -is true -ci true -sn "BackScatteringThicknessTextureB" -ln "BackScatteringThicknessTextureB" + -ct "HW_shader_parameter" -smn 0 -smx 1 -at "float" -p "BackScatteringThicknessTexture"; + addAttr -is true -ci true -h true -sn "skinScatteringRoughness_Name" -ln "skinScatteringRoughness_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "skinScatteringRoughness_Type" -ln "skinScatteringRoughness_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "skinScatteringRoughness" -ln "skinScatteringRoughness" + -nn "Back Scattering Width" -ct "HW_shader_parameter" -dv 1 -min 0 -max 1 -smx 1 + -at "float"; + addAttr -is true -ci true -h true -sn "skinScatteringOuterColor_Name" -ln "skinScatteringOuterColor_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "skinScatteringOuterColor_Type" -ln "skinScatteringOuterColor_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -k true -sn "skinScatteringOuterColor" -ln "skinScatteringOuterColor" + -nn "Back Scattering Color" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "skinScatteringOuterColorR" -ln "skinScatteringOuterColorR" + -ct "HW_shader_parameter" -dv 0.25 -smn 0 -smx 1 -at "float" -p "skinScatteringOuterColor"; + addAttr -is true -ci true -sn "skinScatteringOuterColorG" -ln "skinScatteringOuterColorG" + -ct "HW_shader_parameter" -dv 0.05000000074505806 -smn 0 -smx 1 -at "float" -p "skinScatteringOuterColor"; + addAttr -is true -ci true -sn "skinScatteringOuterColorB" -ln "skinScatteringOuterColorB" + -ct "HW_shader_parameter" -dv 0.019999999552965164 -smn 0 -smx 1 -at "float" -p "skinScatteringOuterColor"; + addAttr -is true -ci true -h true -sn "skinScatteringAmount_Name" -ln "skinScatteringAmount_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "skinScatteringAmount_Type" -ln "skinScatteringAmount_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "skinScatteringAmount" -ln "skinScatteringAmount" + -nn "Back Scattering Amount" -ct "HW_shader_parameter" -dv 1 -min 0 -max 6 -smx 6 + -at "float"; + addAttr -is true -ci true -h true -sn "skinAmbientScatteringAmount_Name" -ln "skinAmbientScatteringAmount_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "skinAmbientScatteringAmount_Type" -ln "skinAmbientScatteringAmount_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "skinAmbientScatteringAmount" -ln "skinAmbientScatteringAmount" + -nn "Back Scattering Ambient Amount" -ct "HW_shader_parameter" -dv 1 -min 0 -max + 6 -smx 6 -at "float"; + addAttr -is true -ci true -h true -sn "UseSpecularTextureAlpha_Name" -ln "UseSpecularTextureAlpha_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseSpecularTextureAlpha_Type" -ln "UseSpecularTextureAlpha_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseSpecularTextureAlpha" -ln "UseSpecularTextureAlpha" + -nn "Use Roughness Map Alpha" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "LobeMix_Name" -ln "LobeMix_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "LobeMix_Type" -ln "LobeMix_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "LobeMix" -ln "LobeMix" -nn "Lobe Mixing" + -ct "HW_shader_parameter" -dv 0.75 -min 0 -max 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "Roughness_Name" -ln "Roughness_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "Roughness_Type" -ln "Roughness_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "Roughness" -ln "Roughness" -nn "Roughness multiplier" + -ct "HW_shader_parameter" -dv 0.20000000298023224 -min 0.0099999997764825821 -max + 1 -smx 1 -at "float"; + addAttr -is true -ci true -h true -sn "OcclusionTexture_Name" -ln "OcclusionTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "OcclusionTexture_Type" -ln "OcclusionTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "OcclusionTexture" -ln "OcclusionTexture" -nn "Ambient Occlusion Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "OcclusionTextureR" -ln "OcclusionTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "OcclusionTexture"; + addAttr -is true -ci true -sn "OcclusionTextureG" -ln "OcclusionTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "OcclusionTexture"; + addAttr -is true -ci true -sn "OcclusionTextureB" -ln "OcclusionTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "OcclusionTexture"; + addAttr -is true -ci true -h true -sn "OcclusionAmount_Name" -ln "OcclusionAmount_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "OcclusionAmount_Type" -ln "OcclusionAmount_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "OcclusionAmount" -ln "OcclusionAmount" -nn "Occlusion Amount" + -ct "HW_shader_parameter" -dv 1 -min 0.0099999997764825821 -max 2 -smx 2 -at "float"; + addAttr -is true -ci true -h true -sn "UseCavityTexture_Name" -ln "UseCavityTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseCavityTexture_Type" -ln "UseCavityTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseCavityTexture" -ln "UseCavityTexture" + -nn "Use Cavity Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "CavityTexture_Name" -ln "CavityTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "CavityTexture_Type" -ln "CavityTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "CavityTexture" -ln "CavityTexture" -nn "Cavity Map" + -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "CavityTextureR" -ln "CavityTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "CavityTexture"; + addAttr -is true -ci true -sn "CavityTextureG" -ln "CavityTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "CavityTexture"; + addAttr -is true -ci true -sn "CavityTextureB" -ln "CavityTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "CavityTexture"; + addAttr -is true -ci true -h true -sn "CavityAmount_Name" -ln "CavityAmount_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "CavityAmount_Type" -ln "CavityAmount_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "CavityAmount" -ln "CavityAmount" -nn "Cavity Amount" + -ct "HW_shader_parameter" -dv 1 -min 0.0099999997764825821 -max 2 -smx 2 -at "float"; + addAttr -is true -ci true -h true -sn "UseMicroCavityTexture_Name" -ln "UseMicroCavityTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseMicroCavityTexture_Type" -ln "UseMicroCavityTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseMicroCavityTexture" -ln "UseMicroCavityTexture" + -nn "Use Micro Cavity Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "MicroCavityTexture_Name" -ln "MicroCavityTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "MicroCavityTexture_Type" -ln "MicroCavityTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "MicroCavityTexture" -ln "MicroCavityTexture" + -nn "Micro Cavity Map" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "MicroCavityTextureR" -ln "MicroCavityTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "MicroCavityTexture"; + addAttr -is true -ci true -sn "MicroCavityTextureG" -ln "MicroCavityTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "MicroCavityTexture"; + addAttr -is true -ci true -sn "MicroCavityTextureB" -ln "MicroCavityTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "MicroCavityTexture"; + addAttr -is true -ci true -h true -sn "MicroCavityAmount_Name" -ln "MicroCavityAmount_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "MicroCavityAmount_Type" -ln "MicroCavityAmount_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "MicroCavityAmount" -ln "MicroCavityAmount" + -nn "Micro Cavity Amount" -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -smx + 2 -at "float"; + addAttr -is true -ci true -h true -sn "UseMicroNormalTexture_Name" -ln "UseMicroNormalTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseMicroNormalTexture_Type" -ln "UseMicroNormalTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseMicroNormalTexture" -ln "UseMicroNormalTexture" + -nn "Use Micro Normal Map" -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "MicroNormalTexture_Name" -ln "MicroNormalTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "MicroNormalTexture_Type" -ln "MicroNormalTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -uac -sn "MicroNormalTexture" -ln "MicroNormalTexture" + -nn "Micro Normal Map" -ct "HW_shader_parameter" -at "float3" -nc 3; + addAttr -is true -ci true -sn "MicroNormalTextureR" -ln "MicroNormalTextureR" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "MicroNormalTexture"; + addAttr -is true -ci true -sn "MicroNormalTextureG" -ln "MicroNormalTextureG" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "MicroNormalTexture"; + addAttr -is true -ci true -sn "MicroNormalTextureB" -ln "MicroNormalTextureB" -ct "HW_shader_parameter" + -smn 0 -smx 1 -at "float" -p "MicroNormalTexture"; + addAttr -is true -ci true -h true -sn "MicroNormalHeight_Name" -ln "MicroNormalHeight_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "MicroNormalHeight_Type" -ln "MicroNormalHeight_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "MicroNormalHeight" -ln "MicroNormalHeight" + -nn "Micro Normal Height" -ct "HW_shader_parameter" -dv 1 -min 0 -max 99999 -smx + 5 -at "float"; + addAttr -is true -ci true -h true -sn "MicroScale_Name" -ln "MicroScale_Name" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -h true -sn "MicroScale_Type" -ln "MicroScale_Type" -ct "HW_shader_parameter" + -dt "string"; + addAttr -is true -ci true -k true -sn "MicroScale" -ln "MicroScale" -nn "Micro Scale" + -ct "HW_shader_parameter" -dv 32 -min 16 -max 99999 -smx 256 -at "float"; + addAttr -is true -ci true -h true -sn "UseBlendTexture_Name" -ln "UseBlendTexture_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "UseBlendTexture_Type" -ln "UseBlendTexture_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "UseBlendTexture" -ln "UseBlendTexture" -nn "Enable Wrinkle Mixing" + -ct "HW_shader_parameter" -min 0 -max 1 -at "bool"; + addAttr -is true -ci true -h true -sn "OcclusionTexcoord_Name" -ln "OcclusionTexcoord_Name" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -h true -sn "OcclusionTexcoord_Type" -ln "OcclusionTexcoord_Type" + -ct "HW_shader_parameter" -dt "string"; + addAttr -is true -ci true -k true -sn "OcclusionTexcoord" -ln "OcclusionTexcoord" + -nn "Ambient Occlusion Map UV" -ct "HW_shader_parameter" -dv 1 -min 0 -max 2 -smn + 0 -smx 1 -en "TexCoord0:TexCoord1:TexCoord2" -at "enum"; + addAttr -ci true -sn "Position" -ln "Position" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "Position_Name" -ln "Position_Name" -ct "HW_shader_parameter" + -dt "string" -p "Position"; + addAttr -is true -ci true -h true -sn "Position_Source" -ln "Position_Source" -ct "HW_shader_parameter" + -dt "string" -p "Position"; + addAttr -is true -ci true -sn "Position_DefaultTexture" -ln "Position_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "Position"; + addAttr -ci true -sn "TexCoord0" -ln "TexCoord0" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "TexCoord0_Name" -ln "TexCoord0_Name" -ct "HW_shader_parameter" + -dt "string" -p "TexCoord0"; + addAttr -is true -ci true -h true -sn "TexCoord0_Source" -ln "TexCoord0_Source" + -ct "HW_shader_parameter" -dt "string" -p "TexCoord0"; + addAttr -is true -ci true -sn "TexCoord0_DefaultTexture" -ln "TexCoord0_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "TexCoord0"; + addAttr -ci true -sn "TexCoord1" -ln "TexCoord1" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "TexCoord1_Name" -ln "TexCoord1_Name" -ct "HW_shader_parameter" + -dt "string" -p "TexCoord1"; + addAttr -is true -ci true -h true -sn "TexCoord1_Source" -ln "TexCoord1_Source" + -ct "HW_shader_parameter" -dt "string" -p "TexCoord1"; + addAttr -is true -ci true -sn "TexCoord1_DefaultTexture" -ln "TexCoord1_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "TexCoord1"; + addAttr -ci true -sn "TexCoord2" -ln "TexCoord2" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "TexCoord2_Name" -ln "TexCoord2_Name" -ct "HW_shader_parameter" + -dt "string" -p "TexCoord2"; + addAttr -is true -ci true -h true -sn "TexCoord2_Source" -ln "TexCoord2_Source" + -ct "HW_shader_parameter" -dt "string" -p "TexCoord2"; + addAttr -is true -ci true -sn "TexCoord2_DefaultTexture" -ln "TexCoord2_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "TexCoord2"; + addAttr -ci true -sn "Normal" -ln "Normal" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "Normal_Name" -ln "Normal_Name" -ct "HW_shader_parameter" + -dt "string" -p "Normal"; + addAttr -is true -ci true -h true -sn "Normal_Source" -ln "Normal_Source" -ct "HW_shader_parameter" + -dt "string" -p "Normal"; + addAttr -is true -ci true -sn "Normal_DefaultTexture" -ln "Normal_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "Normal"; + addAttr -ci true -sn "Binormal0" -ln "Binormal0" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "Binormal0_Name" -ln "Binormal0_Name" -ct "HW_shader_parameter" + -dt "string" -p "Binormal0"; + addAttr -is true -ci true -h true -sn "Binormal0_Source" -ln "Binormal0_Source" + -ct "HW_shader_parameter" -dt "string" -p "Binormal0"; + addAttr -is true -ci true -sn "Binormal0_DefaultTexture" -ln "Binormal0_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "Binormal0"; + addAttr -ci true -sn "Tangent0" -ln "Tangent0" -at "compound" -nc 3; + addAttr -is true -ci true -h true -sn "Tangent0_Name" -ln "Tangent0_Name" -ct "HW_shader_parameter" + -dt "string" -p "Tangent0"; + addAttr -is true -ci true -h true -sn "Tangent0_Source" -ln "Tangent0_Source" -ct "HW_shader_parameter" + -dt "string" -p "Tangent0"; + addAttr -is true -ci true -sn "Tangent0_DefaultTexture" -ln "Tangent0_DefaultTexture" + -ct "HW_shader_parameter" -dt "string" -p "Tangent0"; + setAttr ".vpar" -type "stringArray" 7 "Position" "TexCoord0" "TexCoord1" "TexCoord2" "Normal" "Binormal0" "Tangent0" ; + setAttr ".upar" -type "stringArray" 124 "SuperFilterTaps" "shadowMapTexelSize" "IsSwatchRender" "screenSize" "MayaFullScreenGamma" "light0Enable" "light0Type" "light0Pos" "light0Color" "light0Intensity" "light0Dir" "light0ConeAngle" "light0FallOff" "light0AttenScale" "light0ShadowOn" "light1Enable" "light1Type" "light1Pos" "light1Color" "light1Intensity" "light1Dir" "light1ConeAngle" "light1FallOff" "light1AttenScale" "light1ShadowOn" "light2Enable" "light2Type" "light2Pos" "light2Color" "light2Intensity" "light2Dir" "light2ConeAngle" "light2FallOff" "light2AttenScale" "light2ShadowOn" "LinearSpaceLighting" "UseShadows" "shadowMultiplier" "shadowDepthBias" "flipBackfaceNormals" "SkyRotation" "UseDiffuseIBLMap" "DiffuseIBLIntensity" "DiffuseCubeIBL" "UseSpecCubeIBL" "SpecularIBLIntensity" "SpecularCubeIBL" "transpDepthTexture" "opaqueDepthTexture" "UseDiffuseTexture" "UseDiffuseTextureAlpha" "DiffuseTexture" "DiffuseColor" "LutTexture" "DitherTexture" "skinCoeffX" "skinCoeffY" "skinCoeffZ" "NormalBlurring" "UseScatteringRadiusTexture" "ScatteringRadiusTexture" "skinScattering" "shadowBlur" "shadowDither" "shadowScattering" "shadowSaturation" "UseTranslucency" "BackScatteringThicknessTexture" "UseThicknessTexture" "skinScatteringRoughness" "skinScatteringOuterColor" "skinScatteringAmount" "skinAmbientScatteringAmount" "UseSpecularTextureAlpha" "UseSpecularTexture" "SpecularTexture" "SpecularColor" "LobeMix" "Roughness" "UseAmbientOcclusionTexture" "OcclusionTexture" "OcclusionAmount" "UseCavityTexture" "CavityTexture" "CavityAmount" "UseNormalTexture" "NormalTexture" "NormalHeight" "SupportNonUniformScale" "NormalCoordsysX" "NormalCoordsysY" "UseMicroCavityTexture" "MicroCavityTexture" "MicroCavityAmount" "UseMicroNormalTexture" "MicroNormalTexture" "MicroNormalHeight" "MicroScale" "OpacityMaskTexture" "Opacity" "UseOpacityMaskTexture" "OpacityMaskBias" "DisplacementModel" "UseDisplacementMap" "DisplacementTexture" "VectorDisplacementCoordSys" "DisplacementHeight" "DisplacementOffset" "DisplacementClippingBias" "BBoxExtraScale" "TessellationRange" "TessellationMin" "FlatTessellation" "UseBlendTexture" "DiffuseTexcoord" "OcclusionTexcoord" "OpacityMaskTexcoord" "SpecularTexcoord" "NormalTexcoord" "DisplacementTexcoord" "ThicknessTexcoord" "light0ShadowMap" "light1ShadowMap" "light2ShadowMap" ; + setAttr ".s" -type "string" "$PROJECT_ROOT/Common/SourceAssets/shaders/dx11_shd_eyeRight.fx"; + setAttr ".t" -type "string" "TessellationOFF"; + setAttr ".SuperFilterTaps_Name" -type "string" "SuperFilterTaps"; + setAttr ".SuperFilterTaps_Type" -type "string" "float1x2"; + setAttr ".SuperFilterTaps" -type "float2" -0.84052002 -0.073954001 ; + setAttr ".shadowMapTexelSize_Name" -type "string" "shadowMapTexelSize"; + setAttr ".shadowMapTexelSize_Type" -type "string" "float"; + setAttr ".shadowMapTexelSize" 0.0019531298894435167; + setAttr ".LinearSpaceLighting_Name" -type "string" "LinearSpaceLighting"; + setAttr ".LinearSpaceLighting_Type" -type "string" "bool"; + setAttr -k on ".LinearSpaceLighting" yes; + setAttr ".UseShadows_Name" -type "string" "UseShadows"; + setAttr ".UseShadows_Type" -type "string" "bool"; + setAttr -k on ".UseShadows" yes; + setAttr ".shadowMultiplier_Name" -type "string" "shadowMultiplier"; + setAttr ".shadowMultiplier_Type" -type "string" "float"; + setAttr -k on ".shadowMultiplier" 1; + setAttr ".IsSwatchRender_Name" -type "string" "IsSwatchRender"; + setAttr ".IsSwatchRender_Type" -type "string" "bool"; + setAttr ".IsSwatchRender" no; + setAttr ".shadowDepthBias_Name" -type "string" "shadowDepthBias"; + setAttr ".shadowDepthBias_Type" -type "string" "float"; + setAttr -k on ".shadowDepthBias" 0.0099999997764825821; + setAttr ".MayaFullScreenGamma_Name" -type "string" "MayaFullScreenGamma"; + setAttr ".MayaFullScreenGamma_Type" -type "string" "bool"; + setAttr ".MayaFullScreenGamma" no; + setAttr ".flipBackfaceNormals_Name" -type "string" "flipBackfaceNormals"; + setAttr ".flipBackfaceNormals_Type" -type "string" "bool"; + setAttr -k on ".flipBackfaceNormals" yes; + setAttr ".light0Enable_Name" -type "string" "light0Enable"; + setAttr ".light0Enable_Type" -type "string" "bool"; + setAttr -l on -k on ".light0Enable" no; + setAttr ".light0Type_Name" -type "string" "light0Type"; + setAttr ".light0Type_Type" -type "string" "enum"; + setAttr -l on -k on ".light0Type" 2; + setAttr ".light0Pos_Name" -type "string" "light0Pos"; + setAttr ".light0Pos_Type" -type "string" "matrix1x3"; + setAttr -l on -k on ".light0Pos" -type "matrix" 1 0 0 0 0 1 0 0 0 0 1 0 100 100 100 1; + setAttr ".light0Color_Name" -type "string" "light0Color"; + setAttr ".light0Color_Type" -type "string" "color1x3"; + setAttr -l on -k on ".light0Color" -type "float3" 1 1 1 ; + setAttr -l on -k on ".light0Color"; + setAttr ".light0Intensity_Name" -type "string" "light0Intensity"; + setAttr ".light0Intensity_Type" -type "string" "float"; + setAttr -l on -k on ".light0Intensity" 1; + setAttr ".light0Dir_Name" -type "string" "light0Dir"; + setAttr ".light0Dir_Type" -type "string" "matrix1x3"; + setAttr -l on -k on ".light0Dir" -type "matrix" 1 0 0 0 0 1 0 0 -100 -100 -100 0 + 0 0 0 1; + setAttr ".light0ConeAngle_Name" -type "string" "light0ConeAngle"; + setAttr ".light0ConeAngle_Type" -type "string" "float"; + setAttr -l on -k on ".light0ConeAngle" 0.46000000834465027; + setAttr ".light0FallOff_Name" -type "string" "light0FallOff"; + setAttr ".light0FallOff_Type" -type "string" "float"; + setAttr -l on -k on ".light0FallOff" 0.69999998807907104; + setAttr ".light0AttenScale_Name" -type "string" "light0AttenScale"; + setAttr ".light0AttenScale_Type" -type "string" "float"; + setAttr -l on -k on ".light0AttenScale" 0; + setAttr ".light0ShadowOn_Name" -type "string" "light0ShadowOn"; + setAttr ".light0ShadowOn_Type" -type "string" "bool"; + setAttr ".light0ShadowOn" yes; + setAttr ".light1Enable_Name" -type "string" "light1Enable"; + setAttr ".light1Enable_Type" -type "string" "bool"; + setAttr -l on -k on ".light1Enable" no; + setAttr ".light1Type_Name" -type "string" "light1Type"; + setAttr ".light1Type_Type" -type "string" "enum"; + setAttr -l on -k on ".light1Type" 2; + setAttr ".light1Pos_Name" -type "string" "light1Pos"; + setAttr ".light1Pos_Type" -type "string" "matrix1x3"; + setAttr -l on -k on ".light1Pos" -type "matrix" 1 0 0 0 0 1 0 0 0 0 1 0 -100 100 100 1; + setAttr ".light1Color_Name" -type "string" "light1Color"; + setAttr ".light1Color_Type" -type "string" "color1x3"; + setAttr -l on -k on ".light1Color" -type "float3" 1 1 1 ; + setAttr -l on -k on ".light1Color"; + setAttr ".light1Intensity_Name" -type "string" "light1Intensity"; + setAttr ".light1Intensity_Type" -type "string" "float"; + setAttr -l on -k on ".light1Intensity" 1; + setAttr ".light1Dir_Name" -type "string" "light1Dir"; + setAttr ".light1Dir_Type" -type "string" "matrix1x3"; + setAttr -l on -k on ".light1Dir" -type "matrix" 1 0 0 0 0 1 0 0 -100 -100 -100 0 + 0 0 0 1; + setAttr ".light1ConeAngle_Name" -type "string" "light1ConeAngle"; + setAttr ".light1ConeAngle_Type" -type "string" "float"; + setAttr -l on -k on ".light1ConeAngle" 45; + setAttr ".light1FallOff_Name" -type "string" "light1FallOff"; + setAttr ".light1FallOff_Type" -type "string" "float"; + setAttr -l on -k on ".light1FallOff" 0; + setAttr ".light1AttenScale_Name" -type "string" "light1AttenScale"; + setAttr ".light1AttenScale_Type" -type "string" "float"; + setAttr -l on -k on ".light1AttenScale" 0; + setAttr ".light1ShadowOn_Name" -type "string" "light1ShadowOn"; + setAttr ".light1ShadowOn_Type" -type "string" "bool"; + setAttr ".light1ShadowOn" yes; + setAttr ".light2Enable_Name" -type "string" "light2Enable"; + setAttr ".light2Enable_Type" -type "string" "bool"; + setAttr -l on -k on ".light2Enable" no; + setAttr ".light2Type_Name" -type "string" "light2Type"; + setAttr ".light2Type_Type" -type "string" "enum"; + setAttr -l on -k on ".light2Type" 2; + setAttr ".light2Pos_Name" -type "string" "light2Pos"; + setAttr ".light2Pos_Type" -type "string" "matrix1x3"; + setAttr -l on -k on ".light2Pos" -type "matrix" 1 0 0 0 0 1 0 0 0 0 1 0 100 100 -100 1; + setAttr ".light2Color_Name" -type "string" "light2Color"; + setAttr ".light2Color_Type" -type "string" "color1x3"; + setAttr -l on -k on ".light2Color" -type "float3" 1 1 1 ; + setAttr -l on -k on ".light2Color"; + setAttr ".light2Intensity_Name" -type "string" "light2Intensity"; + setAttr ".light2Intensity_Type" -type "string" "float"; + setAttr -l on -k on ".light2Intensity" 1; + setAttr ".light2Dir_Name" -type "string" "light2Dir"; + setAttr ".light2Dir_Type" -type "string" "matrix1x3"; + setAttr -l on -k on ".light2Dir" -type "matrix" 1 0 0 0 0 1 0 0 -100 -100 -100 0 + 0 0 0 1; + setAttr ".light2ConeAngle_Name" -type "string" "light2ConeAngle"; + setAttr ".light2ConeAngle_Type" -type "string" "float"; + setAttr -l on -k on ".light2ConeAngle" 45; + setAttr ".light2FallOff_Name" -type "string" "light2FallOff"; + setAttr ".light2FallOff_Type" -type "string" "float"; + setAttr -l on -k on ".light2FallOff" 0; + setAttr ".light2AttenScale_Name" -type "string" "light2AttenScale"; + setAttr ".light2AttenScale_Type" -type "string" "float"; + setAttr -l on -k on ".light2AttenScale" 0; + setAttr ".light2ShadowOn_Name" -type "string" "light2ShadowOn"; + setAttr ".light2ShadowOn_Type" -type "string" "bool"; + setAttr ".light2ShadowOn" yes; + setAttr ".UseAmbientOcclusionTexture_Name" -type "string" "UseAmbientOcclusionTexture"; + setAttr ".UseAmbientOcclusionTexture_Type" -type "string" "bool"; + setAttr -k on ".UseAmbientOcclusionTexture" no; + setAttr ".transpDepthTexture_Name" -type "string" "transpDepthTexture"; + setAttr ".transpDepthTexture_Type" -type "string" "texture"; + setAttr ".transpDepthTexture" -type "float3" 0 0 0 ; + setAttr ".opaqueDepthTexture_Name" -type "string" "opaqueDepthTexture"; + setAttr ".opaqueDepthTexture_Type" -type "string" "texture"; + setAttr ".opaqueDepthTexture" -type "float3" 0 0 0 ; + setAttr ".UseDiffuseTexture_Name" -type "string" "UseDiffuseTexture"; + setAttr ".UseDiffuseTexture_Type" -type "string" "bool"; + setAttr -k on ".UseDiffuseTexture" yes; + setAttr ".UseDiffuseTextureAlpha_Name" -type "string" "UseDiffuseTextureAlpha"; + setAttr ".UseDiffuseTextureAlpha_Type" -type "string" "bool"; + setAttr -k on ".UseDiffuseTextureAlpha" no; + setAttr ".DiffuseTexture_Name" -type "string" "DiffuseTexture"; + setAttr ".DiffuseTexture_Type" -type "string" "texture"; + setAttr ".DiffuseTexture" -type "float3" 0 0 0 ; + setAttr ".DiffuseColor_Name" -type "string" "DiffuseColor"; + setAttr ".DiffuseColor_Type" -type "string" "color1x3"; + setAttr -k on ".DiffuseColor" -type "float3" 1 1 1 ; + setAttr ".Opacity_Name" -type "string" "Opacity"; + setAttr ".Opacity_Type" -type "string" "float"; + setAttr -k on ".Opacity" 1; + setAttr ".UseOpacityMaskTexture_Name" -type "string" "UseOpacityMaskTexture"; + setAttr ".UseOpacityMaskTexture_Type" -type "string" "bool"; + setAttr -k on ".UseOpacityMaskTexture" no; + setAttr ".OpacityMaskTexture_Name" -type "string" "OpacityMaskTexture"; + setAttr ".OpacityMaskTexture_Type" -type "string" "texture"; + setAttr ".OpacityMaskTexture" -type "float3" 0 0 0 ; + setAttr ".OpacityMaskBias_Name" -type "string" "OpacityMaskBias"; + setAttr ".OpacityMaskBias_Type" -type "string" "float"; + setAttr -k on ".OpacityMaskBias" 0.10000000149011612; + setAttr ".UseSpecularTexture_Name" -type "string" "UseSpecularTexture"; + setAttr ".UseSpecularTexture_Type" -type "string" "bool"; + setAttr -k on ".UseSpecularTexture" no; + setAttr ".SpecularTexture_Name" -type "string" "SpecularTexture"; + setAttr ".SpecularTexture_Type" -type "string" "texture"; + setAttr ".SpecularTexture" -type "float3" 0 0 0 ; + setAttr ".SpecularColor_Name" -type "string" "SpecularColor"; + setAttr ".SpecularColor_Type" -type "string" "color1x3"; + setAttr -k on ".SpecularColor" -type "float3" 1 1 1 ; + setAttr ".UseNormalTexture_Name" -type "string" "UseNormalTexture"; + setAttr ".UseNormalTexture_Type" -type "string" "bool"; + setAttr -k on ".UseNormalTexture" yes; + setAttr ".NormalTexture_Name" -type "string" "NormalTexture"; + setAttr ".NormalTexture_Type" -type "string" "texture"; + setAttr ".NormalTexture" -type "float3" 0 0 0 ; + setAttr ".NormalHeight_Name" -type "string" "NormalHeight"; + setAttr ".NormalHeight_Type" -type "string" "float"; + setAttr -k on ".NormalHeight" 0.5; + setAttr ".SupportNonUniformScale_Name" -type "string" "SupportNonUniformScale"; + setAttr ".SupportNonUniformScale_Type" -type "string" "bool"; + setAttr -k on ".SupportNonUniformScale" yes; + setAttr ".NormalCoordsysX_Name" -type "string" "NormalCoordsysX"; + setAttr ".NormalCoordsysX_Type" -type "string" "enum"; + setAttr -k on ".NormalCoordsysX" 0; + setAttr ".NormalCoordsysY_Name" -type "string" "NormalCoordsysY"; + setAttr ".NormalCoordsysY_Type" -type "string" "enum"; + setAttr -k on ".NormalCoordsysY" 0; + setAttr ".DisplacementModel_Name" -type "string" "DisplacementModel"; + setAttr ".DisplacementModel_Type" -type "string" "enum"; + setAttr -k on ".DisplacementModel" 0; + setAttr ".UseDisplacementMap_Name" -type "string" "UseDisplacementMap"; + setAttr ".UseDisplacementMap_Type" -type "string" "bool"; + setAttr -k on ".UseDisplacementMap" no; + setAttr ".DisplacementTexture_Name" -type "string" "DisplacementTexture"; + setAttr ".DisplacementTexture_Type" -type "string" "texture"; + setAttr ".DisplacementTexture" -type "float3" 0 0 0 ; + setAttr ".VectorDisplacementCoordSys_Name" -type "string" "VectorDisplacementCoordSys"; + setAttr ".VectorDisplacementCoordSys_Type" -type "string" "enum"; + setAttr -k on ".VectorDisplacementCoordSys" 0; + setAttr ".DisplacementHeight_Name" -type "string" "DisplacementHeight"; + setAttr ".DisplacementHeight_Type" -type "string" "float"; + setAttr -k on ".DisplacementHeight" 0.5; + setAttr ".DisplacementOffset_Name" -type "string" "DisplacementOffset"; + setAttr ".DisplacementOffset_Type" -type "string" "float"; + setAttr -k on ".DisplacementOffset" 0.5; + setAttr ".DisplacementClippingBias_Name" -type "string" "DisplacementClippingBias"; + setAttr ".DisplacementClippingBias_Type" -type "string" "float"; + setAttr -k on ".DisplacementClippingBias" 5; + setAttr ".BBoxExtraScale_Name" -type "string" "BBoxExtraScale"; + setAttr ".BBoxExtraScale_Type" -type "string" "float"; + setAttr -k on ".BBoxExtraScale" 1; + setAttr ".TessellationRange_Name" -type "string" "TessellationRange"; + setAttr ".TessellationRange_Type" -type "string" "float"; + setAttr -k on ".TessellationRange" 0; + setAttr ".TessellationMin_Name" -type "string" "TessellationMin"; + setAttr ".TessellationMin_Type" -type "string" "float"; + setAttr -k on ".TessellationMin" 3; + setAttr ".FlatTessellation_Name" -type "string" "FlatTessellation"; + setAttr ".FlatTessellation_Type" -type "string" "float"; + setAttr -k on ".FlatTessellation" 0; + setAttr ".UseTranslucency_Name" -type "string" "UseTranslucency"; + setAttr ".UseTranslucency_Type" -type "string" "bool"; + setAttr -k on ".UseTranslucency" no; + setAttr ".UseThicknessTexture_Name" -type "string" "UseThicknessTexture"; + setAttr ".UseThicknessTexture_Type" -type "string" "bool"; + setAttr -k on ".UseThicknessTexture" no; + setAttr ".UseDiffuseIBLMap_Name" -type "string" "UseDiffuseIBLMap"; + setAttr ".UseDiffuseIBLMap_Type" -type "string" "bool"; + setAttr -k on ".UseDiffuseIBLMap" yes; + setAttr ".DiffuseIBLIntensity_Name" -type "string" "DiffuseIBLIntensity"; + setAttr ".DiffuseIBLIntensity_Type" -type "string" "float"; + setAttr -k on ".DiffuseIBLIntensity" 0.65499997138977051; + setAttr ".DiffuseTexcoord_Name" -type "string" "DiffuseTexcoord"; + setAttr ".DiffuseTexcoord_Type" -type "string" "enum"; + setAttr -k on ".DiffuseTexcoord" 0; + setAttr ".OpacityMaskTexcoord_Name" -type "string" "OpacityMaskTexcoord"; + setAttr ".OpacityMaskTexcoord_Type" -type "string" "enum"; + setAttr -k on ".OpacityMaskTexcoord" 0; + setAttr ".SpecularTexcoord_Name" -type "string" "SpecularTexcoord"; + setAttr ".SpecularTexcoord_Type" -type "string" "enum"; + setAttr -k on ".SpecularTexcoord" 0; + setAttr ".NormalTexcoord_Name" -type "string" "NormalTexcoord"; + setAttr ".NormalTexcoord_Type" -type "string" "enum"; + setAttr -k on ".NormalTexcoord" 0; + setAttr ".DisplacementTexcoord_Name" -type "string" "DisplacementTexcoord"; + setAttr ".DisplacementTexcoord_Type" -type "string" "enum"; + setAttr -k on ".DisplacementTexcoord" 0; + setAttr ".ThicknessTexcoord_Name" -type "string" "ThicknessTexcoord"; + setAttr ".ThicknessTexcoord_Type" -type "string" "enum"; + setAttr -k on ".ThicknessTexcoord" 0; + setAttr ".light0ShadowMap_Name" -type "string" "light0ShadowMap"; + setAttr ".light0ShadowMap_Type" -type "string" "texture"; + setAttr ".light0ShadowMap" -type "float3" 0 0 0 ; + setAttr ".light1ShadowMap_Name" -type "string" "light1ShadowMap"; + setAttr ".light1ShadowMap_Type" -type "string" "texture"; + setAttr ".light1ShadowMap" -type "float3" 0 0 0 ; + setAttr ".light2ShadowMap_Name" -type "string" "light2ShadowMap"; + setAttr ".light2ShadowMap_Type" -type "string" "texture"; + setAttr ".light2ShadowMap" -type "float3" 0 0 0 ; + setAttr ".screenSize_Name" -type "string" "screenSize"; + setAttr ".screenSize_Type" -type "string" "float1x2"; + setAttr ".screenSize" -type "float2" 0 0 ; + setAttr ".SkyRotation_Name" -type "string" "SkyRotation"; + setAttr ".SkyRotation_Type" -type "string" "float"; + setAttr -k on ".SkyRotation" 12.5; + setAttr ".DiffuseCubeIBL_Name" -type "string" "DiffuseCubeIBL"; + setAttr ".DiffuseCubeIBL_Type" -type "string" "texture"; + setAttr ".DiffuseCubeIBL" -type "float3" 0 0 0 ; + setAttr ".UseSpecCubeIBL_Name" -type "string" "UseSpecCubeIBL"; + setAttr ".UseSpecCubeIBL_Type" -type "string" "bool"; + setAttr -k on ".UseSpecCubeIBL" yes; + setAttr ".SpecularIBLIntensity_Name" -type "string" "SpecularIBLIntensity"; + setAttr ".SpecularIBLIntensity_Type" -type "string" "float"; + setAttr -k on ".SpecularIBLIntensity" 0.020999999716877937; + setAttr ".SpecularCubeIBL_Name" -type "string" "SpecularCubeIBL"; + setAttr ".SpecularCubeIBL_Type" -type "string" "texture"; + setAttr ".SpecularCubeIBL" -type "float3" 0 0 0 ; + setAttr ".LutTexture_Name" -type "string" "LutTexture"; + setAttr ".LutTexture_Type" -type "string" "texture"; + setAttr ".LutTexture" -type "float3" 0 0 0 ; + setAttr ".DitherTexture_Name" -type "string" "DitherTexture"; + setAttr ".DitherTexture_Type" -type "string" "texture"; + setAttr ".DitherTexture" -type "float3" 0 0 0 ; + setAttr ".skinCoeffX_Name" -type "string" "skinCoeffX"; + setAttr ".skinCoeffX_Type" -type "string" "float"; + setAttr -k on ".skinCoeffX" 0.79500001668930054; + setAttr ".skinCoeffY_Name" -type "string" "skinCoeffY"; + setAttr ".skinCoeffY_Type" -type "string" "float"; + setAttr -k on ".skinCoeffY" 0.28799998760223389; + setAttr ".skinCoeffZ_Name" -type "string" "skinCoeffZ"; + setAttr ".skinCoeffZ_Type" -type "string" "float"; + setAttr -k on ".skinCoeffZ" 0.030999999493360519; + setAttr ".NormalBlurring_Name" -type "string" "NormalBlurring"; + setAttr ".NormalBlurring_Type" -type "string" "float"; + setAttr -k on ".NormalBlurring" 1; + setAttr ".ScatteringRadiusTexture_Name" -type "string" "ScatteringRadiusTexture"; + setAttr ".ScatteringRadiusTexture_Type" -type "string" "texture"; + setAttr ".ScatteringRadiusTexture" -type "float3" 0 0 0 ; + setAttr ".UseScatteringRadiusTexture_Name" -type "string" "UseScatteringRadiusTexture"; + setAttr ".UseScatteringRadiusTexture_Type" -type "string" "bool"; + setAttr -k on ".UseScatteringRadiusTexture" no; + setAttr ".skinScattering_Name" -type "string" "skinScattering"; + setAttr ".skinScattering_Type" -type "string" "float"; + setAttr -k on ".skinScattering" 0.43700000643730164; + setAttr ".shadowBlur_Name" -type "string" "shadowBlur"; + setAttr ".shadowBlur_Type" -type "string" "float"; + setAttr -k on ".shadowBlur" 1; + setAttr ".shadowDither_Name" -type "string" "shadowDither"; + setAttr ".shadowDither_Type" -type "string" "float"; + setAttr -k on ".shadowDither" 0.086999997496604919; + setAttr ".shadowScattering_Name" -type "string" "shadowScattering"; + setAttr ".shadowScattering_Type" -type "string" "float"; + setAttr -k on ".shadowScattering" 1; + setAttr ".shadowSaturation_Name" -type "string" "shadowSaturation"; + setAttr ".shadowSaturation_Type" -type "string" "float"; + setAttr -k on ".shadowSaturation" 1.2740000486373901; + setAttr ".BackScatteringThicknessTexture_Name" -type "string" "BackScatteringThicknessTexture"; + setAttr ".BackScatteringThicknessTexture_Type" -type "string" "texture"; + setAttr ".BackScatteringThicknessTexture" -type "float3" 0 0 0 ; + setAttr ".skinScatteringRoughness_Name" -type "string" "skinScatteringRoughness"; + setAttr ".skinScatteringRoughness_Type" -type "string" "float"; + setAttr -k on ".skinScatteringRoughness" 1; + setAttr ".skinScatteringOuterColor_Name" -type "string" "skinScatteringOuterColor"; + setAttr ".skinScatteringOuterColor_Type" -type "string" "color1x3"; + setAttr -k on ".skinScatteringOuterColor" -type "float3" 0.39607844 0.039215688 + 0 ; + setAttr ".skinScatteringAmount_Name" -type "string" "skinScatteringAmount"; + setAttr ".skinScatteringAmount_Type" -type "string" "float"; + setAttr -k on ".skinScatteringAmount" 0.57599997520446777; + setAttr ".skinAmbientScatteringAmount_Name" -type "string" "skinAmbientScatteringAmount"; + setAttr ".skinAmbientScatteringAmount_Type" -type "string" "float"; + setAttr -k on ".skinAmbientScatteringAmount" 2.1779999732971191; + setAttr ".UseSpecularTextureAlpha_Name" -type "string" "UseSpecularTextureAlpha"; + setAttr ".UseSpecularTextureAlpha_Type" -type "string" "bool"; + setAttr -k on ".UseSpecularTextureAlpha" no; + setAttr ".LobeMix_Name" -type "string" "LobeMix"; + setAttr ".LobeMix_Type" -type "string" "float"; + setAttr -k on ".LobeMix" 0.77100002765655518; + setAttr ".Roughness_Name" -type "string" "Roughness"; + setAttr ".Roughness_Type" -type "string" "float"; + setAttr -k on ".Roughness" 0.31000000238418579; + setAttr ".OcclusionTexture_Name" -type "string" "OcclusionTexture"; + setAttr ".OcclusionTexture_Type" -type "string" "texture"; + setAttr ".OcclusionTexture" -type "float3" 0 0 0 ; + setAttr ".OcclusionAmount_Name" -type "string" "OcclusionAmount"; + setAttr ".OcclusionAmount_Type" -type "string" "float"; + setAttr -k on ".OcclusionAmount" 0.5; + setAttr ".UseCavityTexture_Name" -type "string" "UseCavityTexture"; + setAttr ".UseCavityTexture_Type" -type "string" "bool"; + setAttr -k on ".UseCavityTexture" no; + setAttr ".CavityTexture_Name" -type "string" "CavityTexture"; + setAttr ".CavityTexture_Type" -type "string" "texture"; + setAttr ".CavityTexture" -type "float3" 0 0 0 ; + setAttr ".CavityAmount_Name" -type "string" "CavityAmount"; + setAttr ".CavityAmount_Type" -type "string" "float"; + setAttr -k on ".CavityAmount" 1; + setAttr ".UseMicroCavityTexture_Name" -type "string" "UseMicroCavityTexture"; + setAttr ".UseMicroCavityTexture_Type" -type "string" "bool"; + setAttr -k on ".UseMicroCavityTexture" no; + setAttr ".MicroCavityTexture_Name" -type "string" "MicroCavityTexture"; + setAttr ".MicroCavityTexture_Type" -type "string" "texture"; + setAttr ".MicroCavityTexture" -type "float3" 0 0 0 ; + setAttr ".MicroCavityAmount_Name" -type "string" "MicroCavityAmount"; + setAttr ".MicroCavityAmount_Type" -type "string" "float"; + setAttr -k on ".MicroCavityAmount" 1; + setAttr ".UseMicroNormalTexture_Name" -type "string" "UseMicroNormalTexture"; + setAttr ".UseMicroNormalTexture_Type" -type "string" "bool"; + setAttr -k on ".UseMicroNormalTexture" no; + setAttr ".MicroNormalTexture_Name" -type "string" "MicroNormalTexture"; + setAttr ".MicroNormalTexture_Type" -type "string" "texture"; + setAttr ".MicroNormalTexture" -type "float3" 0 0 0 ; + setAttr ".MicroNormalHeight_Name" -type "string" "MicroNormalHeight"; + setAttr ".MicroNormalHeight_Type" -type "string" "float"; + setAttr -k on ".MicroNormalHeight" 1; + setAttr ".MicroScale_Name" -type "string" "MicroScale"; + setAttr ".MicroScale_Type" -type "string" "float"; + setAttr -k on ".MicroScale" 32; + setAttr ".UseBlendTexture_Name" -type "string" "UseBlendTexture"; + setAttr ".UseBlendTexture_Type" -type "string" "bool"; + setAttr -k on ".UseBlendTexture" no; + setAttr ".OcclusionTexcoord_Name" -type "string" "OcclusionTexcoord"; + setAttr ".OcclusionTexcoord_Type" -type "string" "enum"; + setAttr -k on ".OcclusionTexcoord" 1; + setAttr ".Position_Name" -type "string" "Position"; + setAttr ".Position_Source" -type "string" "position"; + setAttr ".TexCoord0_Name" -type "string" "TexCoord0"; + setAttr ".TexCoord0_Source" -type "string" "uv:map1"; + setAttr ".TexCoord0_DefaultTexture" -type "string" "DiffuseTexture"; + setAttr ".TexCoord1_Name" -type "string" "TexCoord1"; + setAttr ".TexCoord1_Source" -type "string" "uv:map2"; + setAttr ".TexCoord1_DefaultTexture" -type "string" "DiffuseTexture"; + setAttr ".TexCoord2_Name" -type "string" "TexCoord2"; + setAttr ".TexCoord2_Source" -type "string" "uv:map3"; + setAttr ".TexCoord2_DefaultTexture" -type "string" "DiffuseTexture"; + setAttr ".Normal_Name" -type "string" "Normal"; + setAttr ".Normal_Source" -type "string" "normal"; + setAttr ".Binormal0_Name" -type "string" "Binormal0"; + setAttr ".Binormal0_Source" -type "string" "binormal:map1"; + setAttr ".Tangent0_Name" -type "string" "Tangent0"; + setAttr ".Tangent0_Source" -type "string" "tangent:map1"; +createNode shadingEngine -n "shader_eyeRight_shaderSG"; + rename -uid "08DB0D16-457D-7243-3E69-0798544194EB"; + setAttr ".ihi" 0; + setAttr ".ro" yes; +createNode materialInfo -n "materialInfo5"; + rename -uid "A70EE1B4-4586-A185-7842-5DB58FCBFC41"; +createNode blinn -n "shader_eyeshell_shader"; + rename -uid "3E72F4E7-4540-EFD6-90B8-3D99D80B4B35"; + setAttr ".it" -type "float3" 0.97000003 0.97000003 0.97000003 ; + setAttr ".sc" -type "float3" 0.25 0.25 0.25 ; + setAttr ".ec" 0.20000000298023224; + setAttr ".sro" 0.20000000298023224; +createNode shadingEngine -n "shader_eyeshell_shaderSG"; + rename -uid "4132A590-46B4-5FFE-17AF-FD8910E2169C"; + setAttr ".ihi" 0; + setAttr ".ro" yes; +createNode materialInfo -n "materialInfo6"; + rename -uid "BA30FFE2-490D-49F7-DF36-9FA95F3F231E"; +createNode blinn -n "shader_eyelashes_shader"; + rename -uid "CDFC281A-42C5-CEEF-15C1-2A95DD22968F"; + setAttr ".sc" -type "float3" 0.25 0.25 0.25 ; + setAttr ".ec" 0.20000000298023224; + setAttr ".sro" 0.20000000298023224; +createNode shadingEngine -n "shader_eyelashes_shaderSG"; + rename -uid "0EDFA50A-4708-7F7E-4BD3-5AADADC4C8BC"; + setAttr ".ihi" 0; + setAttr ".ro" yes; +createNode materialInfo -n "materialInfo7"; + rename -uid "35015A5B-481E-09FF-020E-9282579A0328"; +createNode blinn -n "shader_eyelashesShadow_shader"; + rename -uid "29FDA1D0-4827-4715-B5FF-0A90C10EA067"; + setAttr ".it" -type "float3" 1 1 1 ; + setAttr ".sc" -type "float3" 0.25 0.25 0.25 ; + setAttr ".ec" 0.20000000298023224; + setAttr ".sro" 0.20000000298023224; +createNode shadingEngine -n "shader_eyelashesShadow_shaderSG"; + rename -uid "4A350F6C-4197-6714-EAD8-079EB9404285"; + setAttr ".ihi" 0; + setAttr ".ro" yes; +createNode materialInfo -n "materialInfo8"; + rename -uid "0DABDD32-478C-CB30-2B38-2CB15CD03FCA"; +createNode blinn -n "shader_eyeEdge_shader"; + rename -uid "0F029626-4DD0-1000-A2F4-57834E9B2456"; + setAttr ".it" -type "float3" 0.89999998 0.89999998 0.89999998 ; + setAttr ".sc" -type "float3" 0.25 0.25 0.25 ; + setAttr ".ec" 0.20000000298023224; + setAttr ".sro" 0.20000000298023224; +createNode shadingEngine -n "shader_eyeEdge_shaderSG"; + rename -uid "A6868C2B-4DAA-C33C-8598-E4B2CD78F53E"; + setAttr ".ihi" 0; + setAttr ".ro" yes; +createNode materialInfo -n "materialInfo9"; + rename -uid "0C4D46BA-4695-DB5B-25B7-1C97AA87D7E9"; +createNode file -n "baseMapFile_dx11_diffuseIrradiance"; + rename -uid "23F1BF79-4B31-3F7D-B2FA-36ABECFBB427"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/maps/dx11_diffuseIrradiance_map.dds"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "baseMapFile_dx11_specularIrradiance"; + rename -uid "F5E75DA3-4947-2290-AFE5-96A845991E8C"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/maps/dx11_specularIrradiance_map.dds"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "baseMapFile_dx11_jitter"; + rename -uid "8409A0AC-49BC-1ACC-8ECF-4FAE1A1FA1D1"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/maps/dx11_jitter_map.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "baseMapFile_dx11_skinLUT"; + rename -uid "B4922940-4205-4CA2-458A-4C96D8C8461B"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/maps/dx11_skinLUT_map.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "baseMapFile_head_color"; + rename -uid "722F9311-4BBA-D218-B589-17B6D45D5075"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_color_map.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "mapFile_head_cm1_color"; + rename -uid "A679444E-4346-772D-769B-CC81935051BA"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_cm1_color_map.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "mapFile_head_cm2_color"; + rename -uid "0E1F7B77-40A0-5F0B-7F47-4098DC7D262C"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_cm2_color_map.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "mapFile_head_cm3_color"; + rename -uid "85C975E2-43D9-2625-AE7E-1D935C067AC6"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_cm3_color_map.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "baseMapFile_head_normal"; + rename -uid "25C0C890-4B78-B420-6EB1-F08AE9263FC1"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_normal_map.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "mapFile_head_wm1_normal"; + rename -uid "B5289838-43D7-B9DA-38D0-8C83ADAB1E11"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm1_normal_map.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "mapFile_head_wm2_normal"; + rename -uid "D9D451EE-4485-EB2D-2E36-E2A9BE18D1E3"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm2_normal_map.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "mapFile_head_wm3_normal"; + rename -uid "26D9019B-4B20-C6AF-C99C-2CB82044CAA1"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm3_normal_map.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "baseMapFile_head_cavity"; + rename -uid "BE857633-40BA-F4A9-BB1A-F6B78137E888"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_cavity_map.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm1_blink_L"; + rename -uid "91361518-445B-4451-2E3B-8A9BE930F9E2"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm1_blink_L_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm1_blink_R"; + rename -uid "A7235AE1-421E-EF06-B887-D09927A803E2"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm1_blink_R_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm1_browsRaiseInner_L"; + rename -uid "C834CE2A-43A0-F39F-F702-B6A4078F9C0A"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm1_browsRaiseInner_L_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm1_browsRaiseInner_R"; + rename -uid "DC02C7E0-486C-F927-2EC2-21884539BB15"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm1_browsRaiseInner_R_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm1_browsRaiseOuter_L"; + rename -uid "21CACE3C-4209-4F2B-0D98-C28757094B0B"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm1_browsRaiseOuter_L_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm1_browsRaiseOuter_R"; + rename -uid "FBA67835-447F-ECB7-F2B7-13B461D9380C"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm1_browsRaiseOuter_R_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm1_chinRaise_L"; + rename -uid "2DFBCA2D-4C7D-4E5A-B39E-1B91329DE3F8"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm1_chinRaise_L_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm1_chinRaise_R"; + rename -uid "777AE005-4E77-C9B8-FC9F-5B88534111DB"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm1_chinRaise_R_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm1_jawOpen"; + rename -uid "9E74927E-471B-3704-4C30-4C94358F0EAA"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm1_jawOpen_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm1_purse_DL"; + rename -uid "EB62726E-4FEC-356E-2EEF-21A2C367AB56"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm1_purse_DL_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm1_purse_DR"; + rename -uid "3C996D8C-4082-8ABF-D1D3-C0A52E92A23E"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm1_purse_DR_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm1_purse_UL"; + rename -uid "7CE84665-4D42-FFD0-A79C-38B3390E7BAF"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm1_purse_UL_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm1_purse_UR"; + rename -uid "50C3047A-4E58-5CA1-9E4C-81B5AA8FF5CD"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm1_purse_UR_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm1_squintInner_L"; + rename -uid "073CC0B7-4868-AC36-4915-5BA7A1C25A2D"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm1_squintInner_L_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm1_squintInner_R"; + rename -uid "42D2A40D-4121-CC7B-E50E-F1835FF6BA65"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm1_squintInner_R_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm2_browsDown_L"; + rename -uid "4B9D557E-4A01-0C9A-2698-0C98A77E66E2"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm2_browsDown_L_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm2_browsDown_R"; + rename -uid "BAD4D122-4C88-263B-5CCA-52AEBE8965A5"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm2_browsDown_R_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm2_browsLateral_L"; + rename -uid "960C388E-4130-A4FF-32F6-DC89E94553A2"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm2_browsLateral_L_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm2_browsLateral_R"; + rename -uid "CB0E5006-4858-283A-8ED4-C2B8E91BDA58"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm2_browsLateral_R_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm2_mouthStretch_L"; + rename -uid "11F7806B-48CD-E6E6-D626-B59450BEB900"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm2_mouthStretch_L_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm2_mouthStretch_R"; + rename -uid "4E3CE38C-48FA-4393-0062-50A86B60F43D"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm2_mouthStretch_R_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm2_neckStretch_L"; + rename -uid "34C32F57-4F18-5DBE-D17F-C0B61EFE8F85"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm2_neckStretch_L_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm2_neckStretch_R"; + rename -uid "F7B7CE3A-45A4-F62F-C3E4-1B98812DC10D"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm2_neckStretch_R_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm2_noseWrinkler_L"; + rename -uid "B3B2708D-4505-429B-AEBE-6681412675F5"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm2_noseWrinkler_L_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm2_noseWrinkler_R"; + rename -uid "A2D212EB-4F4E-8400-1BDB-298467CA65E1"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm2_noseWrinkler_R_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm3_cheekRaiseInner_L"; + rename -uid "F2BA15F1-4DE9-AADE-F965-9F931B9A3AA4"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm3_cheekRaiseInner_L_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm3_cheekRaiseInner_R"; + rename -uid "5F0AFDFF-40CE-DBE5-DBAE-03B0F29E8334"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm3_cheekRaiseInner_R_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm3_cheekRaiseOuter_L"; + rename -uid "F60460E9-477A-7673-06A3-AD972C0C2D62"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm3_cheekRaiseOuter_L_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm3_cheekRaiseOuter_R"; + rename -uid "6B562DFD-424A-874F-ED6C-798A825DC890"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm3_cheekRaiseOuter_R_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm3_cheekRaiseUpper_L"; + rename -uid "A2BDE9B1-45B0-0F46-B936-E2AFB02AB7B6"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm3_cheekRaiseUpper_L_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm3_cheekRaiseUpper_R"; + rename -uid "87411C60-4DF3-E7EA-6D78-0E84496A30F3"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm3_cheekRaiseUpper_R_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm3_smile_L"; + rename -uid "1E9D65BD-4458-BBDE-ED6A-4A8E6BEB8AB1"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm3_smile_L_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm3_smile_R"; + rename -uid "45A29737-4B56-A3CD-1B3B-F787C59947EC"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm3_smile_R_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm13_lips_DL"; + rename -uid "7F5949B2-4183-64CF-E628-F8A4A8081BA8"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm13_lips_DL_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm13_lips_DR"; + rename -uid "38EF5569-4CC9-A9CB-14FA-CB8F3BD5173A"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm13_lips_DR_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm13_lips_UL"; + rename -uid "0F981403-487C-D2C8-80FC-4D8F2C430A53"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm13_lips_UL_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "maskFile_head_wm13_lips_UR"; + rename -uid "2472A5AF-4EE9-748C-9F81-CDB66B647AA0"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/head_wm13_lips_UR_msk.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "baseMapFile_teeth_color"; + rename -uid "06DE46C6-4DEE-80C4-4F56-A1B2AFE2C9CC"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/teeth_color_map.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "baseMapFile_teeth_normal"; + rename -uid "37ABA80D-483E-C1F4-3743-5782F241352E"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/teeth_normal_map.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "baseMapFile_eyes_color"; + rename -uid "2C5CE88F-4100-916C-F571-C9B4FF3E4464"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/eyes_color_map.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "baseMapFile_eyes_normal"; + rename -uid "76113BEE-474E-BF46-2F98-C98AAB36C098"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/eyes_normal_map.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode file -n "baseMapFile_eyelashes_color"; + rename -uid "4BBAA10E-4FC9-326C-CABF-C38F37ECEE20"; + setAttr ".ftn" -type "string" "$PROJECT_ROOT/Common/SourceAssets/masks/eyelashes_color_map.tga"; + setAttr ".cs" -type "string" "sRGB"; +createNode nodeGraphEditorBookmarkInfo -n "nodeGraphEditorBookmarkInfo1"; + rename -uid "14159383-4987-9C61-EACB-32895CF4C8BE"; +createNode nodeGraphEditorBookmarkInfo -n "nodeGraphEditorBookmarkInfo2"; + rename -uid "782A145D-4DB8-5E8D-F4BC-83AFB5738FF1"; +createNode nodeGraphEditorBookmarkInfo -n "JointMover_nodeGraphEditorBookmarkInfo1"; + rename -uid "14132E49-44D5-D6FB-9AFF-01BBFBBD79FA"; +createNode nodeGraphEditorBookmarkInfo -n "nodeGraphEditorBookmarkInfo4"; + rename -uid "C618C44F-42E2-1860-509D-98B02734C109"; + addAttr -ci true -sn "rigModule" -ln "rigModule" -dt "string"; + setAttr ".vl" -type "double2" -113.09523809523813 -739.16292609940172 ; + setAttr ".vh" -type "double2" 552.38095238095241 92.682311995836656 ; + setAttr ".rigModule" -type "string" "faceModule"; +createNode nodeGraphEditorInfo -n "faceMask_low_hyperShadePrimaryNodeEditorSavedTabsInfo"; + rename -uid "01654B32-41C8-7686-6EC9-FC96D34D05D2"; + setAttr ".def" no; + setAttr ".tgi[0].tn" -type "string" "Untitled_1"; + setAttr ".tgi[0].vl" -type "double2" -1681.7975162529422 -433.33331611421443 ; + setAttr ".tgi[0].vh" -type "double2" 1660.3689456758657 452.38093440494913 ; +createNode nodeGraphEditorInfo -n "skeleton_015_hyperShadePrimaryNodeEditorSavedTabsInfo"; + rename -uid "749886FE-4137-2C09-9FD0-6FB9DA7E946B"; + setAttr ".def" no; + setAttr ".tgi[0].tn" -type "string" "Untitled_1"; + setAttr ".tgi[0].vl" -type "double2" -650.23992537612548 -757.14282705670439 ; + setAttr ".tgi[0].vh" -type "double2" 1889.5255904170522 541.66664514276806 ; +createNode nodeGraphEditorInfo -n "hyperShadePrimaryNodeEditorSavedTabsInfo1"; + rename -uid "01B83B1A-4A70-70DD-9752-6DBD68D9C095"; + setAttr ".def" no; + setAttr ".tgi[0].tn" -type "string" "Untitled_1"; + setAttr ".tgi[0].vl" -type "double2" -330.95236780151544 -323.80951094248991 ; + setAttr ".tgi[0].vh" -type "double2" 317.85713022663526 338.09522466054096 ; + setAttr -s 32 ".tgi[0].ni"; + setAttr ".tgi[0].ni[0].x" -1517.142822265625; + setAttr ".tgi[0].ni[0].y" 838.5714111328125; + setAttr ".tgi[0].ni[0].nvs" 1922; + setAttr ".tgi[0].ni[1].x" -1502.857177734375; + setAttr ".tgi[0].ni[1].y" 798.5714111328125; + setAttr ".tgi[0].ni[1].nvs" 1922; + setAttr ".tgi[0].ni[2].x" 1320; + setAttr ".tgi[0].ni[2].y" 850; + setAttr ".tgi[0].ni[2].nvs" 1922; + setAttr ".tgi[0].ni[3].x" 998.5714111328125; + setAttr ".tgi[0].ni[3].y" 955.71429443359375; + setAttr ".tgi[0].ni[3].nvs" 1922; + setAttr ".tgi[0].ni[4].x" 998.5714111328125; + setAttr ".tgi[0].ni[4].y" 771.4285888671875; + setAttr ".tgi[0].ni[4].nvs" 1922; + setAttr ".tgi[0].ni[5].x" 1320; + setAttr ".tgi[0].ni[5].y" 665.71429443359375; + setAttr ".tgi[0].ni[5].nvs" 1922; + setAttr ".tgi[0].ni[6].x" 647.14288330078125; + setAttr ".tgi[0].ni[6].y" 950; + setAttr ".tgi[0].ni[6].nvs" 1922; + setAttr ".tgi[0].ni[7].x" 1320; + setAttr ".tgi[0].ni[7].y" 1218.5714111328125; + setAttr ".tgi[0].ni[7].nvs" 1922; + setAttr ".tgi[0].ni[8].x" 998.5714111328125; + setAttr ".tgi[0].ni[8].y" 1174.2857666015625; + setAttr ".tgi[0].ni[8].nvs" 1922; + setAttr ".tgi[0].ni[9].x" -1195.7142333984375; + setAttr ".tgi[0].ni[9].y" 817.14288330078125; + setAttr ".tgi[0].ni[9].nvs" 1922; + setAttr ".tgi[0].ni[10].x" 1320; + setAttr ".tgi[0].ni[10].y" 504.28570556640625; + setAttr ".tgi[0].ni[10].nvs" 1922; + setAttr ".tgi[0].ni[11].x" -888.5714111328125; + setAttr ".tgi[0].ni[11].y" 841.4285888671875; + setAttr ".tgi[0].ni[11].nvs" 1922; + setAttr ".tgi[0].ni[12].x" -581.4285888671875; + setAttr ".tgi[0].ni[12].y" 597.14288330078125; + setAttr ".tgi[0].ni[12].nvs" 1922; + setAttr ".tgi[0].ni[13].x" 1320; + setAttr ".tgi[0].ni[13].y" -237.14285278320313; + setAttr ".tgi[0].ni[13].nvs" 1922; + setAttr ".tgi[0].ni[14].x" -274.28570556640625; + setAttr ".tgi[0].ni[14].y" 512.85711669921875; + setAttr ".tgi[0].ni[14].nvs" 1922; + setAttr ".tgi[0].ni[15].x" 1320; + setAttr ".tgi[0].ni[15].y" -505.71429443359375; + setAttr ".tgi[0].ni[15].nvs" 1922; + setAttr ".tgi[0].ni[16].x" 1320; + setAttr ".tgi[0].ni[16].y" -690; + setAttr ".tgi[0].ni[16].nvs" 1922; + setAttr ".tgi[0].ni[17].x" 32.857143402099609; + setAttr ".tgi[0].ni[17].y" 342.85714721679688; + setAttr ".tgi[0].ni[17].nvs" 1922; + setAttr ".tgi[0].ni[18].x" 1320; + setAttr ".tgi[0].ni[18].y" -874.28570556640625; + setAttr ".tgi[0].ni[18].nvs" 1922; + setAttr ".tgi[0].ni[19].x" 340; + setAttr ".tgi[0].ni[19].y" 760; + setAttr ".tgi[0].ni[19].nvs" 1922; + setAttr ".tgi[0].ni[20].x" 1320; + setAttr ".tgi[0].ni[20].y" 85.714286804199219; + setAttr ".tgi[0].ni[20].nvs" 1922; + setAttr ".tgi[0].ni[21].x" 647.14288330078125; + setAttr ".tgi[0].ni[21].y" 288.57144165039063; + setAttr ".tgi[0].ni[21].nvs" 1922; + setAttr ".tgi[0].ni[22].x" 1320; + setAttr ".tgi[0].ni[22].y" -75.714286804199219; + setAttr ".tgi[0].ni[22].nvs" 1922; + setAttr ".tgi[0].ni[23].x" 998.5714111328125; + setAttr ".tgi[0].ni[23].y" 552.85711669921875; + setAttr ".tgi[0].ni[23].nvs" 1922; + setAttr ".tgi[0].ni[24].x" 998.5714111328125; + setAttr ".tgi[0].ni[24].y" -1078.5714111328125; + setAttr ".tgi[0].ni[24].nvs" 1922; + setAttr ".tgi[0].ni[25].x" 998.5714111328125; + setAttr ".tgi[0].ni[25].y" -470; + setAttr ".tgi[0].ni[25].nvs" 1922; + setAttr ".tgi[0].ni[26].x" 1320; + setAttr ".tgi[0].ni[26].y" 320; + setAttr ".tgi[0].ni[26].nvs" 1922; + setAttr ".tgi[0].ni[27].x" 998.5714111328125; + setAttr ".tgi[0].ni[27].y" 254.28572082519531; + setAttr ".tgi[0].ni[27].nvs" 1922; + setAttr ".tgi[0].ni[28].x" 1320; + setAttr ".tgi[0].ni[28].y" 1034.2857666015625; + setAttr ".tgi[0].ni[28].nvs" 1922; + setAttr ".tgi[0].ni[29].x" 998.5714111328125; + setAttr ".tgi[0].ni[29].y" 70; + setAttr ".tgi[0].ni[29].nvs" 1922; + setAttr ".tgi[0].ni[30].x" 998.5714111328125; + setAttr ".tgi[0].ni[30].y" -745.71429443359375; + setAttr ".tgi[0].ni[30].nvs" 1922; + setAttr ".tgi[0].ni[31].x" 998.5714111328125; + setAttr ".tgi[0].ni[31].y" -285.71429443359375; + setAttr ".tgi[0].ni[31].nvs" 1922; +createNode nodeGraphEditorInfo -n "hyperShadePrimaryNodeEditorSavedTabsInfo2"; + rename -uid "145CD280-44CE-FF7C-7C2F-598EC8F48331"; + setAttr ".def" no; + setAttr ".tgi[0].tn" -type "string" "Untitled_1"; + setAttr ".tgi[0].vl" -type "double2" -323.80951094248991 -330.95236780151544 ; + setAttr ".tgi[0].vh" -type "double2" 324.99998708566085 330.95236780151544 ; +createNode nodeGraphEditorBookmarkInfo -n "nodeGraphEditorBookmarkInfo8"; + rename -uid "9EBCA29C-4F60-25C7-4118-4CAC6076DB71"; +createNode nodeGraphEditorBookmarkInfo -n "nodeGraphEditorBookmarkInfo9"; + rename -uid "429B6F17-4581-4067-D58E-1EA927B2D0C0"; +createNode nodeGraphEditorBookmarkInfo -n "JointMover_nodeGraphEditorBookmarkInfo3"; + rename -uid "732C00B2-40E6-2CDC-49FE-B28F30B26910"; +createNode nodeGraphEditorBookmarkInfo -n "nodeGraphEditorBookmarkInfo10"; + rename -uid "4F62F2A2-4464-D344-9715-9B94864A5AD7"; + addAttr -ci true -sn "rigModule" -ln "rigModule" -dt "string"; + setAttr ".vl" -type "double2" -113.09523809523813 -739.16292609940172 ; + setAttr ".vh" -type "double2" 552.38095238095241 92.682311995836656 ; + setAttr ".rigModule" -type "string" "faceModule"; +createNode nodeGraphEditorInfo -n "faceMask_low_hyperShadePrimaryNodeEditorSavedTabsInfo2"; + rename -uid "3B92B95D-4607-5563-0814-42A1F236D2FA"; + setAttr ".def" no; + setAttr ".tgi[0].tn" -type "string" "Untitled_1"; + setAttr ".tgi[0].vl" -type "double2" -1681.7975162529422 -433.33331611421443 ; + setAttr ".tgi[0].vh" -type "double2" 1660.3689456758657 452.38093440494913 ; +createNode nodeGraphEditorInfo -n "hyperShadePrimaryNodeEditorSavedTabsInfo5"; + rename -uid "4DA4A39C-401D-1AAD-CF07-97A0F0B87BC0"; + setAttr ".def" no; + setAttr ".tgi[0].tn" -type "string" "Untitled_1"; + setAttr ".tgi[0].vl" -type "double2" -650.23992537612548 -757.14282705670439 ; + setAttr ".tgi[0].vh" -type "double2" 1889.5255904170522 541.66664514276806 ; +createNode nodeGraphEditorBookmarkInfo -n "nodeGraphEditorBookmarkInfo5"; + rename -uid "9A668D43-435A-752C-1A98-FA803F2CE156"; +createNode nodeGraphEditorBookmarkInfo -n "nodeGraphEditorBookmarkInfo6"; + rename -uid "06966ECE-4A8C-7682-EC3E-349577584C96"; +createNode nodeGraphEditorBookmarkInfo -n "JointMover_nodeGraphEditorBookmarkInfo2"; + rename -uid "8C2DFF99-4AC5-B2EF-2F27-EC87F4E17A51"; +createNode nodeGraphEditorBookmarkInfo -n "nodeGraphEditorBookmarkInfo7"; + rename -uid "0EB083BC-4177-F1E8-3F03-B9B6F28E3F49"; + addAttr -ci true -sn "rigModule" -ln "rigModule" -dt "string"; + setAttr ".vl" -type "double2" -113.09523809523813 -739.16292609940172 ; + setAttr ".vh" -type "double2" 552.38095238095241 92.682311995836656 ; + setAttr ".rigModule" -type "string" "faceModule"; +createNode nodeGraphEditorInfo -n "faceMask_low_hyperShadePrimaryNodeEditorSavedTabsInfo1"; + rename -uid "1708B0C5-46E0-2DAA-DDFE-08B7E8E66635"; + setAttr ".def" no; + setAttr ".tgi[0].tn" -type "string" "Untitled_1"; + setAttr ".tgi[0].vl" -type "double2" -1681.7975162529422 -433.33331611421443 ; + setAttr ".tgi[0].vh" -type "double2" 1660.3689456758657 452.38093440494913 ; +createNode nodeGraphEditorInfo -n "hyperShadePrimaryNodeEditorSavedTabsInfo3"; + rename -uid "CE8F8401-49D3-4676-219C-8BA4EA6C683A"; + setAttr ".def" no; + setAttr ".tgi[0].tn" -type "string" "Untitled_1"; + setAttr ".tgi[0].vl" -type "double2" -650.23992537612548 -757.14282705670439 ; + setAttr ".tgi[0].vh" -type "double2" 1889.5255904170522 541.66664514276806 ; +createNode animLayer -n "BaseAnimation"; + rename -uid "39AE5AE3-4966-E594-40C2-6EAE4E4C2BA7"; + setAttr ".pref" yes; + setAttr ".slct" yes; + setAttr ".ovrd" yes; +createNode nodeGraphEditorBookmarkInfo -n "nodeGraphEditorBookmarkInfo11"; + rename -uid "73362A08-48E6-F375-BAFB-8BB9A656AC43"; +createNode nodeGraphEditorBookmarkInfo -n "nodeGraphEditorBookmarkInfo12"; + rename -uid "B6EA4974-4D18-AE12-6E54-8F9F56547531"; +createNode nodeGraphEditorBookmarkInfo -n "JointMover_nodeGraphEditorBookmarkInfo4"; + rename -uid "59C6FF06-421A-5DE1-B933-DBAFF2C5D5CD"; +createNode nodeGraphEditorBookmarkInfo -n "nodeGraphEditorBookmarkInfo13"; + rename -uid "4762D3DC-46A4-556D-CA59-6CBB04B7988A"; + addAttr -ci true -sn "rigModule" -ln "rigModule" -dt "string"; + setAttr ".vl" -type "double2" -113.09523809523813 -739.16292609940172 ; + setAttr ".vh" -type "double2" 552.38095238095241 92.682311995836656 ; + setAttr ".rigModule" -type "string" "faceModule"; +createNode nodeGraphEditorInfo -n "faceMask_low_hyperShadePrimaryNodeEditorSavedTabsInfo3"; + rename -uid "AE1FD8F1-482C-36F9-3A8C-CFA961DD54CB"; + setAttr ".def" no; + setAttr ".tgi[0].tn" -type "string" "Untitled_1"; + setAttr ".tgi[0].vl" -type "double2" -1681.7975162529422 -433.33331611421443 ; + setAttr ".tgi[0].vh" -type "double2" 1660.3689456758657 452.38093440494913 ; +createNode nodeGraphEditorInfo -n "hyperShadePrimaryNodeEditorSavedTabsInfo6"; + rename -uid "8ED089A1-484D-8821-BFA9-18A9A243F1DB"; + setAttr ".def" no; + setAttr ".tgi[0].tn" -type "string" "Untitled_1"; + setAttr ".tgi[0].vl" -type "double2" -650.23992537612548 -757.14282705670439 ; + setAttr ".tgi[0].vh" -type "double2" 1889.5255904170522 541.66664514276806 ; +createNode nodeGraphEditorInfo -n "hyperShadePrimaryNodeEditorSavedTabsInfo7"; + rename -uid "80BC8964-478B-615A-1589-0D918B4AC09C"; + setAttr ".def" no; + setAttr ".tgi[0].tn" -type "string" "Untitled_1"; + setAttr ".tgi[0].vl" -type "double2" -330.95236780151544 -323.80951094248991 ; + setAttr ".tgi[0].vh" -type "double2" 317.85713022663526 338.09522466054096 ; + setAttr -s 32 ".tgi[0].ni"; + setAttr ".tgi[0].ni[0].x" -1517.142822265625; + setAttr ".tgi[0].ni[0].y" 838.5714111328125; + setAttr ".tgi[0].ni[0].nvs" 1922; + setAttr ".tgi[0].ni[1].x" -1502.857177734375; + setAttr ".tgi[0].ni[1].y" 798.5714111328125; + setAttr ".tgi[0].ni[1].nvs" 1922; + setAttr ".tgi[0].ni[2].x" 1320; + setAttr ".tgi[0].ni[2].y" 850; + setAttr ".tgi[0].ni[2].nvs" 1922; + setAttr ".tgi[0].ni[3].x" 998.5714111328125; + setAttr ".tgi[0].ni[3].y" 955.71429443359375; + setAttr ".tgi[0].ni[3].nvs" 1922; + setAttr ".tgi[0].ni[4].x" 998.5714111328125; + setAttr ".tgi[0].ni[4].y" 771.4285888671875; + setAttr ".tgi[0].ni[4].nvs" 1922; + setAttr ".tgi[0].ni[5].x" 1320; + setAttr ".tgi[0].ni[5].y" 665.71429443359375; + setAttr ".tgi[0].ni[5].nvs" 1922; + setAttr ".tgi[0].ni[6].x" 647.14288330078125; + setAttr ".tgi[0].ni[6].y" 950; + setAttr ".tgi[0].ni[6].nvs" 1922; + setAttr ".tgi[0].ni[7].x" 1320; + setAttr ".tgi[0].ni[7].y" 1218.5714111328125; + setAttr ".tgi[0].ni[7].nvs" 1922; + setAttr ".tgi[0].ni[8].x" 998.5714111328125; + setAttr ".tgi[0].ni[8].y" 1174.2857666015625; + setAttr ".tgi[0].ni[8].nvs" 1922; + setAttr ".tgi[0].ni[9].x" -1195.7142333984375; + setAttr ".tgi[0].ni[9].y" 817.14288330078125; + setAttr ".tgi[0].ni[9].nvs" 1922; + setAttr ".tgi[0].ni[10].x" 1320; + setAttr ".tgi[0].ni[10].y" 504.28570556640625; + setAttr ".tgi[0].ni[10].nvs" 1922; + setAttr ".tgi[0].ni[11].x" -888.5714111328125; + setAttr ".tgi[0].ni[11].y" 841.4285888671875; + setAttr ".tgi[0].ni[11].nvs" 1922; + setAttr ".tgi[0].ni[12].x" -581.4285888671875; + setAttr ".tgi[0].ni[12].y" 597.14288330078125; + setAttr ".tgi[0].ni[12].nvs" 1922; + setAttr ".tgi[0].ni[13].x" 1320; + setAttr ".tgi[0].ni[13].y" -237.14285278320313; + setAttr ".tgi[0].ni[13].nvs" 1922; + setAttr ".tgi[0].ni[14].x" -274.28570556640625; + setAttr ".tgi[0].ni[14].y" 512.85711669921875; + setAttr ".tgi[0].ni[14].nvs" 1922; + setAttr ".tgi[0].ni[15].x" 1320; + setAttr ".tgi[0].ni[15].y" -505.71429443359375; + setAttr ".tgi[0].ni[15].nvs" 1922; + setAttr ".tgi[0].ni[16].x" 1320; + setAttr ".tgi[0].ni[16].y" -690; + setAttr ".tgi[0].ni[16].nvs" 1922; + setAttr ".tgi[0].ni[17].x" 32.857143402099609; + setAttr ".tgi[0].ni[17].y" 342.85714721679688; + setAttr ".tgi[0].ni[17].nvs" 1922; + setAttr ".tgi[0].ni[18].x" 1320; + setAttr ".tgi[0].ni[18].y" -874.28570556640625; + setAttr ".tgi[0].ni[18].nvs" 1922; + setAttr ".tgi[0].ni[19].x" 340; + setAttr ".tgi[0].ni[19].y" 760; + setAttr ".tgi[0].ni[19].nvs" 1922; + setAttr ".tgi[0].ni[20].x" 1320; + setAttr ".tgi[0].ni[20].y" 85.714286804199219; + setAttr ".tgi[0].ni[20].nvs" 1922; + setAttr ".tgi[0].ni[21].x" 647.14288330078125; + setAttr ".tgi[0].ni[21].y" 288.57144165039063; + setAttr ".tgi[0].ni[21].nvs" 1922; + setAttr ".tgi[0].ni[22].x" 1320; + setAttr ".tgi[0].ni[22].y" -75.714286804199219; + setAttr ".tgi[0].ni[22].nvs" 1922; + setAttr ".tgi[0].ni[23].x" 998.5714111328125; + setAttr ".tgi[0].ni[23].y" 552.85711669921875; + setAttr ".tgi[0].ni[23].nvs" 1922; + setAttr ".tgi[0].ni[24].x" 998.5714111328125; + setAttr ".tgi[0].ni[24].y" -1078.5714111328125; + setAttr ".tgi[0].ni[24].nvs" 1922; + setAttr ".tgi[0].ni[25].x" 998.5714111328125; + setAttr ".tgi[0].ni[25].y" -470; + setAttr ".tgi[0].ni[25].nvs" 1922; + setAttr ".tgi[0].ni[26].x" 1320; + setAttr ".tgi[0].ni[26].y" 320; + setAttr ".tgi[0].ni[26].nvs" 1922; + setAttr ".tgi[0].ni[27].x" 998.5714111328125; + setAttr ".tgi[0].ni[27].y" 254.28572082519531; + setAttr ".tgi[0].ni[27].nvs" 1922; + setAttr ".tgi[0].ni[28].x" 1320; + setAttr ".tgi[0].ni[28].y" 1034.2857666015625; + setAttr ".tgi[0].ni[28].nvs" 1922; + setAttr ".tgi[0].ni[29].x" 998.5714111328125; + setAttr ".tgi[0].ni[29].y" 70; + setAttr ".tgi[0].ni[29].nvs" 1922; + setAttr ".tgi[0].ni[30].x" 998.5714111328125; + setAttr ".tgi[0].ni[30].y" -745.71429443359375; + setAttr ".tgi[0].ni[30].nvs" 1922; + setAttr ".tgi[0].ni[31].x" 998.5714111328125; + setAttr ".tgi[0].ni[31].y" -285.71429443359375; + setAttr ".tgi[0].ni[31].nvs" 1922; +createNode nodeGraphEditorInfo -n "hyperShadePrimaryNodeEditorSavedTabsInfo8"; + rename -uid "A51E528C-42D6-3C56-F4BC-F4A1898C389C"; + setAttr ".def" no; + setAttr ".tgi[0].tn" -type "string" "Untitled_1"; + setAttr ".tgi[0].vl" -type "double2" -323.80951094248991 -330.95236780151544 ; + setAttr ".tgi[0].vh" -type "double2" 324.99998708566085 330.95236780151544 ; +createNode nodeGraphEditorBookmarkInfo -n "nodeGraphEditorBookmarkInfo17"; + rename -uid "9C24CC1E-45E3-D73D-B0ED-54801CA1D618"; +createNode nodeGraphEditorBookmarkInfo -n "nodeGraphEditorBookmarkInfo18"; + rename -uid "E459A66D-481D-D442-E8E2-F49F204FD8D1"; +createNode nodeGraphEditorBookmarkInfo -n "JointMover_nodeGraphEditorBookmarkInfo6"; + rename -uid "E94E0393-4214-2855-EC59-65913192F9F9"; +createNode nodeGraphEditorBookmarkInfo -n "nodeGraphEditorBookmarkInfo19"; + rename -uid "C15167D7-4B70-C741-B24A-97A8844C3DE5"; + addAttr -ci true -sn "rigModule" -ln "rigModule" -dt "string"; + setAttr ".vl" -type "double2" -113.09523809523813 -739.16292609940172 ; + setAttr ".vh" -type "double2" 552.38095238095241 92.682311995836656 ; + setAttr ".rigModule" -type "string" "faceModule"; +createNode nodeGraphEditorInfo -n "faceMask_low_hyperShadePrimaryNodeEditorSavedTabsInfo5"; + rename -uid "0822E6FB-4953-D625-58C0-F7BB07355E25"; + setAttr ".def" no; + setAttr ".tgi[0].tn" -type "string" "Untitled_1"; + setAttr ".tgi[0].vl" -type "double2" -1681.7975162529422 -433.33331611421443 ; + setAttr ".tgi[0].vh" -type "double2" 1660.3689456758657 452.38093440494913 ; +createNode nodeGraphEditorInfo -n "hyperShadePrimaryNodeEditorSavedTabsInfo10"; + rename -uid "7E6FD770-4361-BDBE-24B7-DB94D8343F53"; + setAttr ".def" no; + setAttr ".tgi[0].tn" -type "string" "Untitled_1"; + setAttr ".tgi[0].vl" -type "double2" -650.23992537612548 -757.14282705670439 ; + setAttr ".tgi[0].vh" -type "double2" 1889.5255904170522 541.66664514276806 ; +createNode nodeGraphEditorBookmarkInfo -n "nodeGraphEditorBookmarkInfo14"; + rename -uid "F9D1C673-43F2-7F2C-B524-21A20D24F39E"; +createNode nodeGraphEditorBookmarkInfo -n "nodeGraphEditorBookmarkInfo15"; + rename -uid "7BB98078-4662-C4AD-A44C-1396FD4FF908"; +createNode nodeGraphEditorBookmarkInfo -n "JointMover_nodeGraphEditorBookmarkInfo5"; + rename -uid "804FC654-409C-A09E-AD63-729B633F8205"; +createNode nodeGraphEditorBookmarkInfo -n "nodeGraphEditorBookmarkInfo16"; + rename -uid "B5558253-4C81-6B0C-7279-40AE4273E640"; + addAttr -ci true -sn "rigModule" -ln "rigModule" -dt "string"; + setAttr ".vl" -type "double2" -113.09523809523813 -739.16292609940172 ; + setAttr ".vh" -type "double2" 552.38095238095241 92.682311995836656 ; + setAttr ".rigModule" -type "string" "faceModule"; +createNode nodeGraphEditorInfo -n "faceMask_low_hyperShadePrimaryNodeEditorSavedTabsInfo4"; + rename -uid "26F87E92-4EEB-14AE-D551-8C8B2288FF0A"; + setAttr ".def" no; + setAttr ".tgi[0].tn" -type "string" "Untitled_1"; + setAttr ".tgi[0].vl" -type "double2" -1681.7975162529422 -433.33331611421443 ; + setAttr ".tgi[0].vh" -type "double2" 1660.3689456758657 452.38093440494913 ; +createNode nodeGraphEditorInfo -n "hyperShadePrimaryNodeEditorSavedTabsInfo9"; + rename -uid "50F6A87F-4F60-D52E-AC8C-2E841417E0E2"; + setAttr ".def" no; + setAttr ".tgi[0].tn" -type "string" "Untitled_1"; + setAttr ".tgi[0].vl" -type "double2" -650.23992537612548 -757.14282705670439 ; + setAttr ".tgi[0].vh" -type "double2" 1889.5255904170522 541.66664514276806 ; +createNode nodeGraphEditorInfo -n "hyperShadePrimaryNodeEditorSavedTabsInfo11"; + rename -uid "94769AF7-4458-2DBD-8BBE-8BA87E818A15"; + setAttr ".def" no; + setAttr ".tgi[0].tn" -type "string" "Untitled_1"; + setAttr ".tgi[0].vl" -type "double2" -332.47365071468624 -366.66665209664302 ; + setAttr ".tgi[0].vh" -type "double2" 401.52126701859942 382.1428419578649 ; +createNode nodeGraphEditorInfo -n "hyperShadePrimaryNodeEditorSavedTabsInfo12"; + rename -uid "F8546B9F-41A8-D8FA-BD86-A0B8D8A3449A"; + setAttr ".tgi[0].tn" -type "string" "Untitled_1"; + setAttr ".tgi[0].vl" -type "double2" -1277.4406000935428 -178.26989501506873 ; + setAttr ".tgi[0].vh" -type "double2" 581.03553706445609 490.35014659303152 ; + setAttr -s 3 ".tgi[0].ni"; + setAttr ".tgi[0].ni[0].x" -418.57144165039063; + setAttr ".tgi[0].ni[0].y" 440; + setAttr ".tgi[0].ni[0].nvs" 1923; + setAttr ".tgi[0].ni[1].x" -725.71429443359375; + setAttr ".tgi[0].ni[1].y" 291.42855834960938; + setAttr ".tgi[0].ni[1].nvs" 1923; + setAttr ".tgi[0].ni[2].x" -111.42857360839844; + setAttr ".tgi[0].ni[2].y" 440; + setAttr ".tgi[0].ni[2].nvs" 1923; +select -ne :time1; + setAttr -av -k on ".cch"; + setAttr -k on ".fzn"; + setAttr -av -cb on ".ihi"; + setAttr -av -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -k on ".o" 0; + setAttr -av -k on ".unw"; + setAttr -av -k on ".etw"; + setAttr -av -k on ".tps"; + setAttr -av -k on ".tms"; +select -ne :hardwareRenderingGlobals; + setAttr -av -k on ".cch"; + setAttr -av -k on ".ihi"; + setAttr -av -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr ".otfna" -type "stringArray" 22 "NURBS Curves" "NURBS Surfaces" "Polygons" "Subdiv Surface" "Particles" "Particle Instance" "Fluids" "Strokes" "Image Planes" "UI" "Lights" "Cameras" "Locators" "Joints" "IK Handles" "Deformers" "Motion Trails" "Components" "Hair Systems" "Follicles" "Misc. UI" "Ornaments" ; + setAttr ".otfva" -type "Int32Array" 22 0 1 1 1 1 1 + 1 1 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 ; + setAttr -k on ".hwi"; + setAttr -av ".ta"; + setAttr -av ".tq"; + setAttr -av ".etmr"; + setAttr -av ".tmr"; + setAttr -av ".aoon"; + setAttr -av ".aoam"; + setAttr -av ".aora"; + setAttr -k on ".hff"; + setAttr -av -k on ".hfd"; + setAttr -av -k on ".hfs"; + setAttr -av -k on ".hfe"; + setAttr -av ".hfc"; + setAttr -av -k on ".hfcr"; + setAttr -av -k on ".hfcg"; + setAttr -av -k on ".hfcb"; + setAttr -av -k on ".hfa"; + setAttr -av ".mbe"; + setAttr -av -k on ".mbsof"; + setAttr -k on ".blen"; + setAttr -k on ".blat"; + setAttr -av ".msaa"; + setAttr ".fprt" yes; +select -ne :renderPartition; + setAttr -av -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -av -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -s 11 ".st"; + setAttr -cb on ".an"; + setAttr -cb on ".pt"; +select -ne :renderGlobalsList1; + setAttr -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -k on ".nds"; + setAttr -cb on ".bnm"; +select -ne :defaultShaderList1; + setAttr -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -s 13 ".s"; +select -ne :postProcessList1; + setAttr -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -s 2 ".p"; +select -ne :defaultRenderingList1; + setAttr -k on ".ihi"; +select -ne :defaultTextureList1; + setAttr -s 55 ".tx"; +select -ne :initialShadingGroup; + setAttr -av -k on ".cch"; + setAttr -k on ".fzn"; + setAttr -cb on ".ihi"; + setAttr -av -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -k on ".bbx"; + setAttr -k on ".vwm"; + setAttr -k on ".tpv"; + setAttr -k on ".uit"; + setAttr -k on ".mwc"; + setAttr -cb on ".an"; + setAttr -cb on ".il"; + setAttr -cb on ".vo"; + setAttr -cb on ".eo"; + setAttr -cb on ".fo"; + setAttr -cb on ".epo"; + setAttr -k on ".ro" yes; +select -ne :initialParticleSE; + setAttr -av -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -av -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -k on ".mwc"; + setAttr -cb on ".an"; + setAttr -cb on ".il"; + setAttr -cb on ".vo"; + setAttr -cb on ".eo"; + setAttr -cb on ".fo"; + setAttr -cb on ".epo"; + setAttr -k on ".ro" yes; +lockNode -l 0 -lu 1; +select -ne :defaultResolution; + setAttr -av -k on ".cch"; + setAttr -av -k on ".ihi"; + setAttr -av -k on ".nds"; + setAttr -k on ".bnm"; + setAttr -av -k on ".w"; + setAttr -av -k on ".h"; + setAttr -av -k on ".pa" 1; + setAttr -av -k on ".al"; + setAttr -av -k on ".dar"; + setAttr -av -k on ".ldar"; + setAttr -av -k on ".dpi"; + setAttr -av -k on ".off"; + setAttr -av -k on ".fld"; + setAttr -av -k on ".zsl"; + setAttr -av -k on ".isu"; + setAttr -av -k on ".pdu"; +select -ne :hardwareRenderGlobals; + setAttr -av -k on ".cch"; + setAttr -cb on ".ihi"; + setAttr -av -k on ".nds"; + setAttr -cb on ".bnm"; + setAttr -av -k off -cb on ".ctrs" 256; + setAttr -av -k off -cb on ".btrs" 512; + setAttr -av -k off -cb on ".fbfm"; + setAttr -av -k off -cb on ".ehql"; + setAttr -av -k off -cb on ".eams"; + setAttr -av -k off -cb on ".eeaa"; + setAttr -av -k off -cb on ".engm"; + setAttr -av -k off -cb on ".mes"; + setAttr -av -k off -cb on ".emb"; + setAttr -av -k off -cb on ".mbbf"; + setAttr -av -k off -cb on ".mbs"; + setAttr -av -k off -cb on ".trm"; + setAttr -av -k off -cb on ".tshc"; + setAttr -av -k off -cb on ".enpt"; + setAttr -av -k off -cb on ".clmt"; + setAttr -av -k off -cb on ".tcov"; + setAttr -av -k off -cb on ".lith"; + setAttr -av -k off -cb on ".sobc"; + setAttr -av -k off -cb on ".cuth"; + setAttr -av -k off -cb on ".hgcd"; + setAttr -av -k off -cb on ".hgci"; + setAttr -av -k off -cb on ".mgcs"; + setAttr -av -k off -cb on ".twa"; + setAttr -av -k off -cb on ".twz"; + setAttr -cb on ".hwcc"; + setAttr -cb on ".hwdp"; + setAttr -cb on ".hwql"; + setAttr -k on ".hwfr"; + setAttr -k on ".soll"; + setAttr -k on ".sosl"; + setAttr -k on ".bswa"; + setAttr -k on ".shml"; + setAttr -k on ".hwel"; +relationship "link" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" "shader_head_shaderSG.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" "shader_teeth_shaderSG.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" "shader_saliva_shaderSG.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" "shader_eyeLeft_shaderSG.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" "shader_eyeRight_shaderSG.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" "shader_eyeshell_shaderSG.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" "shader_eyelashes_shaderSG.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" "shader_eyelashesShadow_shaderSG.message" ":defaultLightSet.message"; +relationship "link" ":lightLinker1" "shader_eyeEdge_shaderSG.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialShadingGroup.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" ":initialParticleSE.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" "shader_head_shaderSG.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" "shader_teeth_shaderSG.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" "shader_saliva_shaderSG.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" "shader_eyeLeft_shaderSG.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" "shader_eyeRight_shaderSG.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" "shader_eyeshell_shaderSG.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" "shader_eyelashes_shaderSG.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" "shader_eyelashesShadow_shaderSG.message" ":defaultLightSet.message"; +relationship "shadowLink" ":lightLinker1" "shader_eyeEdge_shaderSG.message" ":defaultLightSet.message"; +connectAttr "layerManager.dli[0]" "defaultLayer.id"; +connectAttr "renderLayerManager.rlmi[0]" "defaultRenderLayer.rlid"; +connectAttr "baseMapFile_dx11_diffuseIrradiance.oc" "shader_head_shader.DiffuseCubeIBL" + ; +connectAttr "baseMapFile_dx11_specularIrradiance.oc" "shader_head_shader.SpecularCubeIBL" + ; +connectAttr "baseMapFile_dx11_jitter.oc" "shader_head_shader.DitherTexture"; +connectAttr "baseMapFile_dx11_skinLUT.oc" "shader_head_shader.LutTexture"; +connectAttr "baseMapFile_head_color.oc" "shader_head_shader.DiffuseTexture"; +connectAttr "mapFile_head_cm1_color.oc" "shader_head_shader.animColorMap_00"; +connectAttr "mapFile_head_cm2_color.oc" "shader_head_shader.animColorMap_01"; +connectAttr "mapFile_head_cm3_color.oc" "shader_head_shader.animColorMap_02"; +connectAttr "baseMapFile_head_normal.oc" "shader_head_shader.NormalTexture"; +connectAttr "mapFile_head_wm1_normal.oc" "shader_head_shader.animNormalMap_00"; +connectAttr "mapFile_head_wm2_normal.oc" "shader_head_shader.animNormalMap_01"; +connectAttr "mapFile_head_wm3_normal.oc" "shader_head_shader.animNormalMap_02"; +connectAttr "baseMapFile_head_cavity.oc" "shader_head_shader.CavityTexture"; +connectAttr "maskFile_head_wm1_blink_L.oc" "shader_head_shader.maskChannel_00"; +connectAttr "maskFile_head_wm1_blink_R.oc" "shader_head_shader.maskChannel_01"; +connectAttr "maskFile_head_wm1_browsRaiseInner_L.oc" "shader_head_shader.maskChannel_02" + ; +connectAttr "maskFile_head_wm1_browsRaiseInner_R.oc" "shader_head_shader.maskChannel_03" + ; +connectAttr "maskFile_head_wm1_browsRaiseOuter_L.oc" "shader_head_shader.maskChannel_04" + ; +connectAttr "maskFile_head_wm1_browsRaiseOuter_R.oc" "shader_head_shader.maskChannel_05" + ; +connectAttr "maskFile_head_wm1_chinRaise_L.oc" "shader_head_shader.maskChannel_06" + ; +connectAttr "maskFile_head_wm1_chinRaise_R.oc" "shader_head_shader.maskChannel_07" + ; +connectAttr "maskFile_head_wm1_jawOpen.oc" "shader_head_shader.maskChannel_08"; +connectAttr "maskFile_head_wm1_purse_DL.oc" "shader_head_shader.maskChannel_09"; +connectAttr "maskFile_head_wm1_purse_DR.oc" "shader_head_shader.maskChannel_10"; +connectAttr "maskFile_head_wm1_purse_UL.oc" "shader_head_shader.maskChannel_11"; +connectAttr "maskFile_head_wm1_purse_UR.oc" "shader_head_shader.maskChannel_12"; +connectAttr "maskFile_head_wm1_squintInner_L.oc" "shader_head_shader.maskChannel_13" + ; +connectAttr "maskFile_head_wm1_squintInner_R.oc" "shader_head_shader.maskChannel_14" + ; +connectAttr "maskFile_head_wm2_browsDown_L.oc" "shader_head_shader.maskChannel_15" + ; +connectAttr "maskFile_head_wm2_browsDown_R.oc" "shader_head_shader.maskChannel_16" + ; +connectAttr "maskFile_head_wm2_browsLateral_L.oc" "shader_head_shader.maskChannel_17" + ; +connectAttr "maskFile_head_wm2_browsLateral_R.oc" "shader_head_shader.maskChannel_18" + ; +connectAttr "maskFile_head_wm2_mouthStretch_L.oc" "shader_head_shader.maskChannel_19" + ; +connectAttr "maskFile_head_wm2_mouthStretch_R.oc" "shader_head_shader.maskChannel_20" + ; +connectAttr "maskFile_head_wm2_neckStretch_L.oc" "shader_head_shader.maskChannel_21" + ; +connectAttr "maskFile_head_wm2_neckStretch_R.oc" "shader_head_shader.maskChannel_22" + ; +connectAttr "maskFile_head_wm2_noseWrinkler_L.oc" "shader_head_shader.maskChannel_23" + ; +connectAttr "maskFile_head_wm2_noseWrinkler_R.oc" "shader_head_shader.maskChannel_24" + ; +connectAttr "maskFile_head_wm3_cheekRaiseInner_L.oc" "shader_head_shader.maskChannel_25" + ; +connectAttr "maskFile_head_wm3_cheekRaiseInner_R.oc" "shader_head_shader.maskChannel_26" + ; +connectAttr "maskFile_head_wm3_cheekRaiseOuter_L.oc" "shader_head_shader.maskChannel_27" + ; +connectAttr "maskFile_head_wm3_cheekRaiseOuter_R.oc" "shader_head_shader.maskChannel_28" + ; +connectAttr "maskFile_head_wm3_cheekRaiseUpper_L.oc" "shader_head_shader.maskChannel_29" + ; +connectAttr "maskFile_head_wm3_cheekRaiseUpper_R.oc" "shader_head_shader.maskChannel_30" + ; +connectAttr "maskFile_head_wm3_smile_L.oc" "shader_head_shader.maskChannel_31"; +connectAttr "maskFile_head_wm3_smile_R.oc" "shader_head_shader.maskChannel_32"; +connectAttr "maskFile_head_wm13_lips_DL.oc" "shader_head_shader.maskChannel_33"; +connectAttr "maskFile_head_wm13_lips_DR.oc" "shader_head_shader.maskChannel_34"; +connectAttr "maskFile_head_wm13_lips_UL.oc" "shader_head_shader.maskChannel_35"; +connectAttr "maskFile_head_wm13_lips_UR.oc" "shader_head_shader.maskChannel_36"; +connectAttr "shader_head_shader.oc" "shader_head_shaderSG.ss"; +connectAttr "shader_head_shaderSG.msg" "materialInfo1.sg"; +connectAttr "shader_head_shader.msg" "materialInfo1.m"; +connectAttr "baseMapFile_dx11_diffuseIrradiance.oc" "shader_teeth_shader.DiffuseCubeIBL" + ; +connectAttr "baseMapFile_dx11_specularIrradiance.oc" "shader_teeth_shader.SpecularCubeIBL" + ; +connectAttr "baseMapFile_dx11_jitter.oc" "shader_teeth_shader.DitherTexture"; +connectAttr "baseMapFile_dx11_skinLUT.oc" "shader_teeth_shader.LutTexture"; +connectAttr "baseMapFile_teeth_color.oc" "shader_teeth_shader.DiffuseTexture"; +connectAttr "baseMapFile_teeth_normal.oc" "shader_teeth_shader.NormalTexture"; +connectAttr "shader_teeth_shader.oc" "shader_teeth_shaderSG.ss"; +connectAttr "shader_teeth_shaderSG.msg" "materialInfo2.sg"; +connectAttr "shader_teeth_shader.msg" "materialInfo2.m"; +connectAttr "shader_saliva_shader.oc" "shader_saliva_shaderSG.ss"; +connectAttr "shader_saliva_shaderSG.msg" "materialInfo3.sg"; +connectAttr "shader_saliva_shader.msg" "materialInfo3.m"; +connectAttr "baseMapFile_dx11_diffuseIrradiance.oc" "shader_eyeLeft_shader.DiffuseCubeIBL" + ; +connectAttr "baseMapFile_dx11_specularIrradiance.oc" "shader_eyeLeft_shader.SpecularCubeIBL" + ; +connectAttr "baseMapFile_dx11_jitter.oc" "shader_eyeLeft_shader.DitherTexture"; +connectAttr "baseMapFile_dx11_skinLUT.oc" "shader_eyeLeft_shader.LutTexture"; +connectAttr "baseMapFile_eyes_color.oc" "shader_eyeLeft_shader.DiffuseTexture"; +connectAttr "baseMapFile_eyes_normal.oc" "shader_eyeLeft_shader.NormalTexture"; +connectAttr "shader_eyeLeft_shader.oc" "shader_eyeLeft_shaderSG.ss"; +connectAttr "shader_eyeLeft_shaderSG.msg" "materialInfo4.sg"; +connectAttr "shader_eyeLeft_shader.msg" "materialInfo4.m"; +connectAttr "baseMapFile_dx11_diffuseIrradiance.oc" "shader_eyeRight_shader.DiffuseCubeIBL" + ; +connectAttr "baseMapFile_dx11_specularIrradiance.oc" "shader_eyeRight_shader.SpecularCubeIBL" + ; +connectAttr "baseMapFile_dx11_jitter.oc" "shader_eyeRight_shader.DitherTexture"; +connectAttr "baseMapFile_dx11_skinLUT.oc" "shader_eyeRight_shader.LutTexture"; +connectAttr "baseMapFile_eyes_color.oc" "shader_eyeRight_shader.DiffuseTexture"; +connectAttr "baseMapFile_eyes_normal.oc" "shader_eyeRight_shader.NormalTexture"; +connectAttr "shader_eyeRight_shader.oc" "shader_eyeRight_shaderSG.ss"; +connectAttr "shader_eyeRight_shaderSG.msg" "materialInfo5.sg"; +connectAttr "shader_eyeRight_shader.msg" "materialInfo5.m"; +connectAttr "shader_eyeshell_shader.oc" "shader_eyeshell_shaderSG.ss"; +connectAttr "shader_eyeshell_shaderSG.msg" "materialInfo6.sg"; +connectAttr "shader_eyeshell_shader.msg" "materialInfo6.m"; +connectAttr "baseMapFile_eyelashes_color.oc" "shader_eyelashes_shader.c"; +connectAttr "baseMapFile_eyelashes_color.ot" "shader_eyelashes_shader.it"; +connectAttr "shader_eyelashes_shader.oc" "shader_eyelashes_shaderSG.ss"; +connectAttr "shader_eyelashes_shaderSG.msg" "materialInfo7.sg"; +connectAttr "shader_eyelashes_shader.msg" "materialInfo7.m"; +connectAttr "baseMapFile_eyelashes_color.msg" "materialInfo7.t" -na; +connectAttr "shader_eyelashesShadow_shader.oc" "shader_eyelashesShadow_shaderSG.ss" + ; +connectAttr "shader_eyelashesShadow_shaderSG.msg" "materialInfo8.sg"; +connectAttr "shader_eyelashesShadow_shader.msg" "materialInfo8.m"; +connectAttr "shader_eyeEdge_shader.oc" "shader_eyeEdge_shaderSG.ss"; +connectAttr "shader_eyeEdge_shaderSG.msg" "materialInfo9.sg"; +connectAttr "shader_eyeEdge_shader.msg" "materialInfo9.m"; +connectAttr ":defaultColorMgtGlobals.cme" "baseMapFile_dx11_diffuseIrradiance.cme" + ; +connectAttr ":defaultColorMgtGlobals.cfe" "baseMapFile_dx11_diffuseIrradiance.cmcf" + ; +connectAttr ":defaultColorMgtGlobals.cfp" "baseMapFile_dx11_diffuseIrradiance.cmcp" + ; +connectAttr ":defaultColorMgtGlobals.wsn" "baseMapFile_dx11_diffuseIrradiance.ws" + ; +connectAttr ":defaultColorMgtGlobals.cme" "baseMapFile_dx11_specularIrradiance.cme" + ; +connectAttr ":defaultColorMgtGlobals.cfe" "baseMapFile_dx11_specularIrradiance.cmcf" + ; +connectAttr ":defaultColorMgtGlobals.cfp" "baseMapFile_dx11_specularIrradiance.cmcp" + ; +connectAttr ":defaultColorMgtGlobals.wsn" "baseMapFile_dx11_specularIrradiance.ws" + ; +connectAttr ":defaultColorMgtGlobals.cme" "baseMapFile_dx11_jitter.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "baseMapFile_dx11_jitter.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "baseMapFile_dx11_jitter.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "baseMapFile_dx11_jitter.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "baseMapFile_dx11_skinLUT.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "baseMapFile_dx11_skinLUT.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "baseMapFile_dx11_skinLUT.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "baseMapFile_dx11_skinLUT.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "baseMapFile_head_color.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "baseMapFile_head_color.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "baseMapFile_head_color.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "baseMapFile_head_color.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "mapFile_head_cm1_color.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "mapFile_head_cm1_color.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "mapFile_head_cm1_color.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "mapFile_head_cm1_color.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "mapFile_head_cm2_color.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "mapFile_head_cm2_color.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "mapFile_head_cm2_color.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "mapFile_head_cm2_color.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "mapFile_head_cm3_color.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "mapFile_head_cm3_color.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "mapFile_head_cm3_color.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "mapFile_head_cm3_color.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "baseMapFile_head_normal.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "baseMapFile_head_normal.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "baseMapFile_head_normal.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "baseMapFile_head_normal.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "mapFile_head_wm1_normal.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "mapFile_head_wm1_normal.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "mapFile_head_wm1_normal.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "mapFile_head_wm1_normal.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "mapFile_head_wm2_normal.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "mapFile_head_wm2_normal.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "mapFile_head_wm2_normal.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "mapFile_head_wm2_normal.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "mapFile_head_wm3_normal.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "mapFile_head_wm3_normal.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "mapFile_head_wm3_normal.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "mapFile_head_wm3_normal.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "baseMapFile_head_cavity.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "baseMapFile_head_cavity.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "baseMapFile_head_cavity.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "baseMapFile_head_cavity.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm1_blink_L.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm1_blink_L.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm1_blink_L.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm1_blink_L.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm1_blink_R.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm1_blink_R.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm1_blink_R.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm1_blink_R.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm1_browsRaiseInner_L.cme" + ; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm1_browsRaiseInner_L.cmcf" + ; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm1_browsRaiseInner_L.cmcp" + ; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm1_browsRaiseInner_L.ws" + ; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm1_browsRaiseInner_R.cme" + ; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm1_browsRaiseInner_R.cmcf" + ; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm1_browsRaiseInner_R.cmcp" + ; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm1_browsRaiseInner_R.ws" + ; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm1_browsRaiseOuter_L.cme" + ; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm1_browsRaiseOuter_L.cmcf" + ; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm1_browsRaiseOuter_L.cmcp" + ; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm1_browsRaiseOuter_L.ws" + ; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm1_browsRaiseOuter_R.cme" + ; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm1_browsRaiseOuter_R.cmcf" + ; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm1_browsRaiseOuter_R.cmcp" + ; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm1_browsRaiseOuter_R.ws" + ; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm1_chinRaise_L.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm1_chinRaise_L.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm1_chinRaise_L.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm1_chinRaise_L.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm1_chinRaise_R.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm1_chinRaise_R.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm1_chinRaise_R.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm1_chinRaise_R.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm1_jawOpen.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm1_jawOpen.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm1_jawOpen.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm1_jawOpen.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm1_purse_DL.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm1_purse_DL.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm1_purse_DL.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm1_purse_DL.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm1_purse_DR.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm1_purse_DR.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm1_purse_DR.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm1_purse_DR.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm1_purse_UL.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm1_purse_UL.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm1_purse_UL.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm1_purse_UL.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm1_purse_UR.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm1_purse_UR.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm1_purse_UR.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm1_purse_UR.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm1_squintInner_L.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm1_squintInner_L.cmcf" + ; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm1_squintInner_L.cmcp" + ; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm1_squintInner_L.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm1_squintInner_R.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm1_squintInner_R.cmcf" + ; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm1_squintInner_R.cmcp" + ; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm1_squintInner_R.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm2_browsDown_L.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm2_browsDown_L.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm2_browsDown_L.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm2_browsDown_L.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm2_browsDown_R.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm2_browsDown_R.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm2_browsDown_R.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm2_browsDown_R.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm2_browsLateral_L.cme" + ; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm2_browsLateral_L.cmcf" + ; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm2_browsLateral_L.cmcp" + ; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm2_browsLateral_L.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm2_browsLateral_R.cme" + ; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm2_browsLateral_R.cmcf" + ; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm2_browsLateral_R.cmcp" + ; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm2_browsLateral_R.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm2_mouthStretch_L.cme" + ; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm2_mouthStretch_L.cmcf" + ; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm2_mouthStretch_L.cmcp" + ; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm2_mouthStretch_L.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm2_mouthStretch_R.cme" + ; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm2_mouthStretch_R.cmcf" + ; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm2_mouthStretch_R.cmcp" + ; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm2_mouthStretch_R.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm2_neckStretch_L.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm2_neckStretch_L.cmcf" + ; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm2_neckStretch_L.cmcp" + ; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm2_neckStretch_L.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm2_neckStretch_R.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm2_neckStretch_R.cmcf" + ; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm2_neckStretch_R.cmcp" + ; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm2_neckStretch_R.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm2_noseWrinkler_L.cme" + ; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm2_noseWrinkler_L.cmcf" + ; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm2_noseWrinkler_L.cmcp" + ; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm2_noseWrinkler_L.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm2_noseWrinkler_R.cme" + ; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm2_noseWrinkler_R.cmcf" + ; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm2_noseWrinkler_R.cmcp" + ; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm2_noseWrinkler_R.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm3_cheekRaiseInner_L.cme" + ; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm3_cheekRaiseInner_L.cmcf" + ; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm3_cheekRaiseInner_L.cmcp" + ; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm3_cheekRaiseInner_L.ws" + ; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm3_cheekRaiseInner_R.cme" + ; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm3_cheekRaiseInner_R.cmcf" + ; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm3_cheekRaiseInner_R.cmcp" + ; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm3_cheekRaiseInner_R.ws" + ; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm3_cheekRaiseOuter_L.cme" + ; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm3_cheekRaiseOuter_L.cmcf" + ; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm3_cheekRaiseOuter_L.cmcp" + ; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm3_cheekRaiseOuter_L.ws" + ; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm3_cheekRaiseOuter_R.cme" + ; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm3_cheekRaiseOuter_R.cmcf" + ; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm3_cheekRaiseOuter_R.cmcp" + ; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm3_cheekRaiseOuter_R.ws" + ; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm3_cheekRaiseUpper_L.cme" + ; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm3_cheekRaiseUpper_L.cmcf" + ; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm3_cheekRaiseUpper_L.cmcp" + ; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm3_cheekRaiseUpper_L.ws" + ; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm3_cheekRaiseUpper_R.cme" + ; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm3_cheekRaiseUpper_R.cmcf" + ; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm3_cheekRaiseUpper_R.cmcp" + ; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm3_cheekRaiseUpper_R.ws" + ; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm3_smile_L.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm3_smile_L.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm3_smile_L.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm3_smile_L.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm3_smile_R.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm3_smile_R.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm3_smile_R.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm3_smile_R.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm13_lips_DL.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm13_lips_DL.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm13_lips_DL.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm13_lips_DL.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm13_lips_DR.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm13_lips_DR.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm13_lips_DR.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm13_lips_DR.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm13_lips_UL.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm13_lips_UL.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm13_lips_UL.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm13_lips_UL.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "maskFile_head_wm13_lips_UR.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "maskFile_head_wm13_lips_UR.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "maskFile_head_wm13_lips_UR.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "maskFile_head_wm13_lips_UR.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "baseMapFile_teeth_color.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "baseMapFile_teeth_color.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "baseMapFile_teeth_color.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "baseMapFile_teeth_color.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "baseMapFile_teeth_normal.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "baseMapFile_teeth_normal.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "baseMapFile_teeth_normal.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "baseMapFile_teeth_normal.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "baseMapFile_eyes_color.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "baseMapFile_eyes_color.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "baseMapFile_eyes_color.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "baseMapFile_eyes_color.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "baseMapFile_eyes_normal.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "baseMapFile_eyes_normal.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "baseMapFile_eyes_normal.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "baseMapFile_eyes_normal.ws"; +connectAttr ":defaultColorMgtGlobals.cme" "baseMapFile_eyelashes_color.cme"; +connectAttr ":defaultColorMgtGlobals.cfe" "baseMapFile_eyelashes_color.cmcf"; +connectAttr ":defaultColorMgtGlobals.cfp" "baseMapFile_eyelashes_color.cmcp"; +connectAttr ":defaultColorMgtGlobals.wsn" "baseMapFile_eyelashes_color.ws"; +connectAttr "shader_eyelashes_shader.msg" "hyperShadePrimaryNodeEditorSavedTabsInfo12.tgi[0].ni[0].dn" + ; +connectAttr "baseMapFile_eyelashes_color.msg" "hyperShadePrimaryNodeEditorSavedTabsInfo12.tgi[0].ni[1].dn" + ; +connectAttr "shader_eyelashes_shaderSG.msg" "hyperShadePrimaryNodeEditorSavedTabsInfo12.tgi[0].ni[2].dn" + ; +connectAttr "shader_head_shaderSG.pa" ":renderPartition.st" -na; +connectAttr "shader_teeth_shaderSG.pa" ":renderPartition.st" -na; +connectAttr "shader_saliva_shaderSG.pa" ":renderPartition.st" -na; +connectAttr "shader_eyeLeft_shaderSG.pa" ":renderPartition.st" -na; +connectAttr "shader_eyeRight_shaderSG.pa" ":renderPartition.st" -na; +connectAttr "shader_eyeshell_shaderSG.pa" ":renderPartition.st" -na; +connectAttr "shader_eyelashes_shaderSG.pa" ":renderPartition.st" -na; +connectAttr "shader_eyelashesShadow_shaderSG.pa" ":renderPartition.st" -na; +connectAttr "shader_eyeEdge_shaderSG.pa" ":renderPartition.st" -na; +connectAttr "shader_head_shader.msg" ":defaultShaderList1.s" -na; +connectAttr "shader_teeth_shader.msg" ":defaultShaderList1.s" -na; +connectAttr "shader_saliva_shader.msg" ":defaultShaderList1.s" -na; +connectAttr "shader_eyeLeft_shader.msg" ":defaultShaderList1.s" -na; +connectAttr "shader_eyeRight_shader.msg" ":defaultShaderList1.s" -na; +connectAttr "shader_eyeshell_shader.msg" ":defaultShaderList1.s" -na; +connectAttr "shader_eyelashes_shader.msg" ":defaultShaderList1.s" -na; +connectAttr "shader_eyelashesShadow_shader.msg" ":defaultShaderList1.s" -na; +connectAttr "shader_eyeEdge_shader.msg" ":defaultShaderList1.s" -na; +connectAttr "defaultRenderLayer.msg" ":defaultRenderingList1.r" -na; +connectAttr "baseMapFile_dx11_diffuseIrradiance.msg" ":defaultTextureList1.tx" -na + ; +connectAttr "baseMapFile_dx11_specularIrradiance.msg" ":defaultTextureList1.tx" + -na; +connectAttr "baseMapFile_dx11_jitter.msg" ":defaultTextureList1.tx" -na; +connectAttr "baseMapFile_dx11_skinLUT.msg" ":defaultTextureList1.tx" -na; +connectAttr "baseMapFile_head_color.msg" ":defaultTextureList1.tx" -na; +connectAttr "mapFile_head_cm1_color.msg" ":defaultTextureList1.tx" -na; +connectAttr "mapFile_head_cm2_color.msg" ":defaultTextureList1.tx" -na; +connectAttr "mapFile_head_cm3_color.msg" ":defaultTextureList1.tx" -na; +connectAttr "baseMapFile_head_normal.msg" ":defaultTextureList1.tx" -na; +connectAttr "mapFile_head_wm1_normal.msg" ":defaultTextureList1.tx" -na; +connectAttr "mapFile_head_wm2_normal.msg" ":defaultTextureList1.tx" -na; +connectAttr "mapFile_head_wm3_normal.msg" ":defaultTextureList1.tx" -na; +connectAttr "baseMapFile_head_cavity.msg" ":defaultTextureList1.tx" -na; +connectAttr "maskFile_head_wm1_blink_L.msg" ":defaultTextureList1.tx" -na; +connectAttr "maskFile_head_wm1_blink_R.msg" ":defaultTextureList1.tx" -na; +connectAttr "maskFile_head_wm1_browsRaiseInner_L.msg" ":defaultTextureList1.tx" + -na; +connectAttr "maskFile_head_wm1_browsRaiseInner_R.msg" ":defaultTextureList1.tx" + -na; +connectAttr "maskFile_head_wm1_browsRaiseOuter_L.msg" ":defaultTextureList1.tx" + -na; +connectAttr "maskFile_head_wm1_browsRaiseOuter_R.msg" ":defaultTextureList1.tx" + -na; +connectAttr "maskFile_head_wm1_chinRaise_L.msg" ":defaultTextureList1.tx" -na; +connectAttr "maskFile_head_wm1_chinRaise_R.msg" ":defaultTextureList1.tx" -na; +connectAttr "maskFile_head_wm1_jawOpen.msg" ":defaultTextureList1.tx" -na; +connectAttr "maskFile_head_wm1_purse_DL.msg" ":defaultTextureList1.tx" -na; +connectAttr "maskFile_head_wm1_purse_DR.msg" ":defaultTextureList1.tx" -na; +connectAttr "maskFile_head_wm1_purse_UL.msg" ":defaultTextureList1.tx" -na; +connectAttr "maskFile_head_wm1_purse_UR.msg" ":defaultTextureList1.tx" -na; +connectAttr "maskFile_head_wm1_squintInner_L.msg" ":defaultTextureList1.tx" -na; +connectAttr "maskFile_head_wm1_squintInner_R.msg" ":defaultTextureList1.tx" -na; +connectAttr "maskFile_head_wm2_browsDown_L.msg" ":defaultTextureList1.tx" -na; +connectAttr "maskFile_head_wm2_browsDown_R.msg" ":defaultTextureList1.tx" -na; +connectAttr "maskFile_head_wm2_browsLateral_L.msg" ":defaultTextureList1.tx" -na + ; +connectAttr "maskFile_head_wm2_browsLateral_R.msg" ":defaultTextureList1.tx" -na + ; +connectAttr "maskFile_head_wm2_mouthStretch_L.msg" ":defaultTextureList1.tx" -na + ; +connectAttr "maskFile_head_wm2_mouthStretch_R.msg" ":defaultTextureList1.tx" -na + ; +connectAttr "maskFile_head_wm2_neckStretch_L.msg" ":defaultTextureList1.tx" -na; +connectAttr "maskFile_head_wm2_neckStretch_R.msg" ":defaultTextureList1.tx" -na; +connectAttr "maskFile_head_wm2_noseWrinkler_L.msg" ":defaultTextureList1.tx" -na + ; +connectAttr "maskFile_head_wm2_noseWrinkler_R.msg" ":defaultTextureList1.tx" -na + ; +connectAttr "maskFile_head_wm3_cheekRaiseInner_L.msg" ":defaultTextureList1.tx" + -na; +connectAttr "maskFile_head_wm3_cheekRaiseInner_R.msg" ":defaultTextureList1.tx" + -na; +connectAttr "maskFile_head_wm3_cheekRaiseOuter_L.msg" ":defaultTextureList1.tx" + -na; +connectAttr "maskFile_head_wm3_cheekRaiseOuter_R.msg" ":defaultTextureList1.tx" + -na; +connectAttr "maskFile_head_wm3_cheekRaiseUpper_L.msg" ":defaultTextureList1.tx" + -na; +connectAttr "maskFile_head_wm3_cheekRaiseUpper_R.msg" ":defaultTextureList1.tx" + -na; +connectAttr "maskFile_head_wm3_smile_L.msg" ":defaultTextureList1.tx" -na; +connectAttr "maskFile_head_wm3_smile_R.msg" ":defaultTextureList1.tx" -na; +connectAttr "maskFile_head_wm13_lips_DL.msg" ":defaultTextureList1.tx" -na; +connectAttr "maskFile_head_wm13_lips_DR.msg" ":defaultTextureList1.tx" -na; +connectAttr "maskFile_head_wm13_lips_UL.msg" ":defaultTextureList1.tx" -na; +connectAttr "maskFile_head_wm13_lips_UR.msg" ":defaultTextureList1.tx" -na; +connectAttr "baseMapFile_teeth_color.msg" ":defaultTextureList1.tx" -na; +connectAttr "baseMapFile_teeth_normal.msg" ":defaultTextureList1.tx" -na; +connectAttr "baseMapFile_eyes_color.msg" ":defaultTextureList1.tx" -na; +connectAttr "baseMapFile_eyes_normal.msg" ":defaultTextureList1.tx" -na; +connectAttr "baseMapFile_eyelashes_color.msg" ":defaultTextureList1.tx" -na; +connectAttr ":perspShape.msg" ":defaultRenderGlobals.sc"; +connectAttr "baseMapFile_eyelashes_color.oc" ":internal_soloShader.ic"; +// End of head_shader.ma diff --git a/data/shaders/dx11_shd_body.fx b/data/shaders/dx11_shd_body.fx new file mode 100644 index 0000000..9b38d5a --- /dev/null +++ b/data/shaders/dx11_shd_body.fx @@ -0,0 +1,4271 @@ +// Maya Skin shader made by Charles Greivelding 2014 + +//------------------------------------ +// Notes +//------------------------------------ +// Shader uses 'pre-multiplied alpha' as its render state and this Uber Shader is build to work in unison with that. +// Alternatively, in Maya, the dx11Shader node allows you to set your own render states by supplying the 'overridesDrawState' annotation in the technique +// You may find it harder to get proper transparency sorting if you choose to do so. + +// The technique annotation 'isTransparent' is used to tell Maya how treat the technique with respect to transparency. +// - If set to 0 the technique is always considered opaque +// - If set to 1 the technique is always considered transparent +// - If set to 2 the plugin will check if the parameter marked with the OPACITY semantic is less than 1.0 +// - If set to 3 the plugin will use the transparencyTest annotation to create a MEL procedure to perform the desired test. +// Maya will then render the object twice. Front faces follow by back faces. + +// For some objects you may need to switch the Transparency Algorithm to 'Depth Peeling' to avoid transparency issues. +// Models that require this usually have internal faces. + +//------------------------------------ +// Defines +//------------------------------------ +// how many mip map levels should Maya generate or load per texture. +// 0 means all possible levels +// some textures may override this value, but most textures will follow whatever we have defined here +// If you wish to optimize performance (at the cost of reduced quality), you can set NumberOfMipMaps below to 1 + +#define NumberOfMipMaps 0 +#define PI 3.1415926 +#define _3DSMAX_SPIN_MAX 99999 + +#ifndef _MAYA_ +#define _3DSMAX_ // at time of writing this shader, Nitrous driver did not have the _3DSMAX_ define set +#define _ZUP_ // Maya is Y up, 3dsMax is Z up +#endif + +#ifdef _MAYA_ +#define _SUPPORTTESSELLATION_ // at time of writing this shader, 3dsMax did not support tessellation +#endif + +//------------------------------------ +// State +//------------------------------------ +#ifdef _MAYA_ +RasterizerState WireframeCullFront { + CullMode = Front; + FillMode = WIREFRAME; +}; + +BlendState PMAlphaBlending { + AlphaToCoverageEnable = FALSE; + BlendEnable[0] = TRUE; + SrcBlend = ONE; + DestBlend = INV_SRC_ALPHA; + BlendOp = ADD; + SrcBlendAlpha = ONE; // Required for hardware frame render alpha channel + DestBlendAlpha = INV_SRC_ALPHA; + BlendOpAlpha = ADD; + RenderTargetWriteMask[0] = 0x0F; +}; +#endif + +//------------------------------------ +// Map Channels +//------------------------------------ +#ifdef _3DSMAX_ +int texcoord0 : Texcoord < + int Texcoord = 0; + int MapChannel = 1; + string UIWidget = "None"; +>; + +int texcoord1 : Texcoord < + int Texcoord = 1; + int MapChannel = 2; + string UIWidget = "None"; +>; + +int texcoord2 : Texcoord < + int Texcoord = 2; + int MapChannel = 3; + string UIWidget = "None"; +>; +#endif + +//------------------------------------ +// Samplers +//------------------------------------ +SamplerState CubeMapSampler { + Filter = ANISOTROPIC; + AddressU = Clamp; + AddressV = Clamp; + AddressW = Clamp; +}; + +SamplerState SamplerAnisoWrap { + Filter = ANISOTROPIC; + AddressU = Wrap; + AddressV = Wrap; +}; + +SamplerState SamplerAnisoClamp { + Filter = ANISOTROPIC; + AddressU = Clamp; + AddressV = Clamp; +}; + +SamplerState SamplerShadowDepth { + Filter = MIN_MAG_MIP_POINT; + AddressU = Border; + AddressV = Border; + BorderColor = float4(1.0f, 1.0f, 1.0f, 1.0f); +}; + +//------------------------------------ +// Textures +//------------------------------------ + +Texture2D LutTexture < + string UIGroup = "SubSurfaceScattering"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "SSS LUT Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 203; + int UVEditorOrder = 2; +>; + +Texture2D DitherTexture < + string UIGroup = "SubSurfaceScattering"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "SSS Dither Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 203; + int UVEditorOrder = 2; +>; + +// --------------------------------------------- +// Blend GROUP +// --------------------------------------------- + +bool UseBlendTexture < + string UIGroup = "Wrinkle mixing"; + string UIName = "Enable Wrinkle Mixing"; + int UIOrder = 919; +> = false; + +Texture2D animNormalMap_00 < + string UIGroup = "Animated Maps"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Wrinkle Map 00"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 948; + int UVEditorOrder = 2; +>; + +Texture2D animNormalMap_01 < + string UIGroup = "Animated Maps"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Wrinkle Map 01"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 949; + int UVEditorOrder = 2; +>; + +Texture2D animNormalMap_02 < + string UIGroup = "Animated Maps"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Wrinkle Map 02"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 950; + int UVEditorOrder = 2; +>; + + +Texture2D animColorMap_00 < + string UIGroup = "Animated Maps"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Blood Flow 00"; + string ResourceType = "2D"; + int UIOrder = 951; + int UVEditorOrder = 2; +>; + +Texture2D animColorMap_01 < + string UIGroup = "Animated Maps"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Blood Flow 01"; + string ResourceType = "2D"; + int UIOrder = 952; + int UVEditorOrder = 2; +>; + +Texture2D animColorMap_02 < + string UIGroup = "Animated Maps"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Blood Flow 02"; + string ResourceType = "2D"; + int UIOrder = 953; + int UVEditorOrder = 2; +>; + + +Texture2D maskChannel_00 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 00 Mask"; + string ResourceType = "2D"; + int UIOrder = 948; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_01 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 01 Mask"; + string ResourceType = "2D"; + int UIOrder = 949; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_02 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 02 Mask"; + string ResourceType = "2D"; + int UIOrder = 950; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_03 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 03 Mask"; + string ResourceType = "2D"; + int UIOrder = 951; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_04 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 04 Mask"; + string ResourceType = "2D"; + int UIOrder = 952; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_05 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 05 Mask"; + string ResourceType = "2D"; + int UIOrder = 953; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_06 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 06 Mask"; + string ResourceType = "2D"; + int UIOrder = 954; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_07 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 07 Mask"; + string ResourceType = "2D"; + int UIOrder = 955; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_08 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 08 Mask"; + string ResourceType = "2D"; + int UIOrder = 956; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_09 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 09 Mask"; + string ResourceType = "2D"; + int UIOrder = 957; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_10 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 10 Mask"; + string ResourceType = "2D"; + int UIOrder = 958; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_11 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 11 Mask"; + string ResourceType = "2D"; + int UIOrder = 959; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_12 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 12 Mask"; + string ResourceType = "2D"; + int UIOrder = 960; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_13 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 13 Mask"; + string ResourceType = "2D"; + int UIOrder = 961; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_14 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 14 Mask"; + string ResourceType = "2D"; + int UIOrder = 962; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_15 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 15 Mask"; + string ResourceType = "2D"; + int UIOrder = 963; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_16 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 16 Mask"; + string ResourceType = "2D"; + int UIOrder = 964; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_17 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 17 Mask"; + string ResourceType = "2D"; + int UIOrder = 965; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_18 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 18 Mask"; + string ResourceType = "2D"; + int UIOrder = 966; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_19 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 19 Mask"; + string ResourceType = "2D"; + int UIOrder = 967; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_20 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 20 Mask"; + string ResourceType = "2D"; + int UIOrder = 968; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_21 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 21 Mask"; + string ResourceType = "2D"; + int UIOrder = 969; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_22 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 22 Mask"; + string ResourceType = "2D"; + int UIOrder = 970; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_23 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 23 Mask"; + string ResourceType = "2D"; + int UIOrder = 971; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_24 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 24 Mask"; + string ResourceType = "2D"; + int UIOrder = 972; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_25 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 25 Mask"; + string ResourceType = "2D"; + int UIOrder = 973; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_26 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 26 Mask"; + string ResourceType = "2D"; + int UIOrder = 974; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_27 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 27 Mask"; + string ResourceType = "2D"; + int UIOrder = 975; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_28 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 28 Mask"; + string ResourceType = "2D"; + int UIOrder = 976; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_29 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 29 Mask"; + string ResourceType = "2D"; + int UIOrder = 977; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_30 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 30 Mask"; + string ResourceType = "2D"; + int UIOrder = 978; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_31 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 31 Mask"; + string ResourceType = "2D"; + int UIOrder = 979; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_32 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 32 Mask"; + string ResourceType = "2D"; + int UIOrder = 980; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_33 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 33 Mask"; + string ResourceType = "2D"; + int UIOrder = 981; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_34 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 34 Mask"; + string ResourceType = "2D"; + int UIOrder = 982; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_35 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 35 Mask"; + string ResourceType = "2D"; + int UIOrder = 983; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_36 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 36 Mask"; + string ResourceType = "2D"; + int UIOrder = 984; + int UVEditorOrder = 2; +>; + + +float maskWeight_00 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 00 Multiplier"; + float UIStep = 0.01; + int UIOrder = 954; +> = 0.0; + +float maskWeight_01 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 01 Multiplier"; + float UIStep = 0.01; + int UIOrder = 955; +> = 0.0; + +float maskWeight_02 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 02 Multiplier"; + float UIStep = 0.01; + int UIOrder = 956; +> = 0.0; + +float maskWeight_03 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 03 Multiplier"; + float UIStep = 0.01; + int UIOrder = 957; +> = 0.0; + +float maskWeight_04 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 04 Multiplier"; + float UIStep = 0.01; + int UIOrder = 958; +> = 0.0; + +float maskWeight_05 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 05 Multiplier"; + float UIStep = 0.01; + int UIOrder = 959; +> = 0.0; + +float maskWeight_06 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 06 Multiplier"; + float UIStep = 0.01; + int UIOrder = 960; +> = 0.0; + +float maskWeight_07 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 07 Multiplier"; + float UIStep = 0.01; + int UIOrder = 961; +> = 0.0; + +float maskWeight_08 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 08 Multiplier"; + float UIStep = 0.01; + int UIOrder = 962; +> = 0.0; + +float maskWeight_09 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 09 Multiplier"; + float UIStep = 0.01; + int UIOrder = 963; +> = 0.0; + +float maskWeight_10 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 10 Multiplier"; + float UIStep = 0.01; + int UIOrder = 964; +> = 0.0; + +float maskWeight_11 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 11 Multiplier"; + float UIStep = 0.01; + int UIOrder = 965; +> = 0.0; + +float maskWeight_12 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 12 Multiplier"; + float UIStep = 0.01; + int UIOrder = 966; +> = 0.0; + +float maskWeight_13 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 13 Multiplier"; + float UIStep = 0.01; + int UIOrder = 967; +> = 0.0; + +float maskWeight_14 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 14 Multiplier"; + float UIStep = 0.01; + int UIOrder = 968; +> = 0.0; + +float maskWeight_15 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 15 Multiplier"; + float UIStep = 0.01; + int UIOrder = 969; +> = 0.0; + +float maskWeight_16 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 16 Multiplier"; + float UIStep = 0.01; + int UIOrder = 970; +> = 0.0; + +float maskWeight_17 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 17 Multiplier"; + float UIStep = 0.01; + int UIOrder = 971; +> = 0.0; + +float maskWeight_18 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 18 Multiplier"; + float UIStep = 0.01; + int UIOrder = 972; +> = 0.0; + +float maskWeight_19 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 19 Multiplier"; + float UIStep = 0.01; + int UIOrder = 973; +> = 0.0; + +float maskWeight_20 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 20 Multiplier"; + float UIStep = 0.01; + int UIOrder = 974; +> = 0.0; + +float maskWeight_21 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 21 Multiplier"; + float UIStep = 0.01; + int UIOrder = 975; +> = 0.0; + +float maskWeight_22 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 22 Multiplier"; + float UIStep = 0.01; + int UIOrder = 976; +> = 0.0; + +float maskWeight_23 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 23 Multiplier"; + float UIStep = 0.01; + int UIOrder = 977; +> = 0.0; + +float maskWeight_24 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 24 Multiplier"; + float UIStep = 0.01; + int UIOrder = 978; +> = 0.0; + +float maskWeight_25 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 25 Multiplier"; + float UIStep = 0.01; + int UIOrder = 979; +> = 0.0; + +float maskWeight_26 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 26 Multiplier"; + float UIStep = 0.01; + int UIOrder = 980; +> = 0.0; + +float maskWeight_27 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 27 Multiplier"; + float UIStep = 0.01; + int UIOrder = 981; +> = 0.0; + +float maskWeight_28 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 28 Multiplier"; + float UIStep = 0.01; + int UIOrder = 982; +> = 0.0; + +float maskWeight_29 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 29 Multiplier"; + float UIStep = 0.01; + int UIOrder = 983; +> = 0.0; + +float maskWeight_30 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 30 Multiplier"; + float UIStep = 0.01; + int UIOrder = 984; +> = 0.0; + +float maskWeight_31 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 31 Multiplier"; + float UIStep = 0.01; + int UIOrder = 985; +> = 0.0; + +float maskWeight_32 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 32 Multiplier"; + float UIStep = 0.01; + int UIOrder = 986; +> = 0.0; + +float maskWeight_33 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 33 Multiplier"; + float UIStep = 0.01; + int UIOrder = 987; +> = 0.0; + +float maskWeight_34 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 34 Multiplier"; + float UIStep = 0.01; + int UIOrder = 988; +> = 0.0; + +float maskWeight_35 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 35 Multiplier"; + float UIStep = 0.01; + int UIOrder = 989; +> = 0.0; + +float maskWeight_36 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 36 Multiplier"; + float UIStep = 0.01; + int UIOrder = 990; +> = 0.0; + +float maskWeight_37 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 37 Multiplier"; + float UIStep = 0.01; + int UIOrder = 991; +> = 0.0; + +float maskWeight_38 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 38 Multiplier"; + float UIStep = 0.01; + int UIOrder = 992; +> = 0.0; + +float maskWeight_39 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 39 Multiplier"; + float UIStep = 0.01; + int UIOrder = 993; +> = 0.0; + +float maskWeight_40 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 40 Multiplier"; + float UIStep = 0.01; + int UIOrder = 994; +> = 0.0; + +float maskWeight_41 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 41 Multiplier"; + float UIStep = 0.01; + int UIOrder = 995; +> = 0.0; + +float maskWeight_42 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 42 Multiplier"; + float UIStep = 0.01; + int UIOrder = 996; +> = 0.0; + +float maskWeight_43 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 43 Multiplier"; + float UIStep = 0.01; + int UIOrder = 997; +> = 0.0; + +float maskWeight_44 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 44 Multiplier"; + float UIStep = 0.01; + int UIOrder = 998; +> = 0.0; + +float maskWeight_45 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 45 Multiplier"; + float UIStep = 0.01; + int UIOrder = 999; +> = 0.0; + +float maskWeight_46 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 46 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1000; +> = 0.0; + +float maskWeight_47 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 47 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1001; +> = 0.0; + +float maskWeight_48 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 48 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1002; +> = 0.0; + +float maskWeight_49 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 49 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1003; +> = 0.0; + +float maskWeight_50 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 50 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1004; +> = 0.0; + +float maskWeight_51 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 51 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1005; +> = 0.0; + +float maskWeight_52 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 52 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1006; +> = 0.0; + +float maskWeight_53 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 53 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1007; +> = 0.0; + +float maskWeight_54 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 54 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1008; +> = 0.0; + +float maskWeight_55 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 55 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1009; +> = 0.0; + +float maskWeight_56 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 56 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1010; +> = 0.0; + +float maskWeight_57 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 57 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1011; +> = 0.0; + +float maskWeight_58 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 58 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1012; +> = 0.0; + +float maskWeight_59 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 59 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1013; +> = 0.0; + +float maskWeight_60 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 60 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1014; +> = 0.0; + +float maskWeight_61 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 61 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1015; +> = 0.0; + +float maskWeight_62 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 62 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1016; +> = 0.0; + +float maskWeight_63 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 63 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1017; +> = 0.0; + +float maskWeight_64 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 64 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1018; +> = 0.0; + +float maskWeight_65 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 65 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1019; +> = 0.0; + +float maskWeight_66 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 66 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1020; +> = 0.0; + +float maskWeight_67 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 67 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1021; +> = 0.0; + +float maskWeight_68 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 68 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1022; +> = 0.0; + +float maskWeight_69 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 69 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1023; +> = 0.0; + +float maskWeight_70 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 70 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1024; +> = 0.0; + +float maskWeight_71 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 71 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1025; +> = 0.0; + +float maskWeight_72 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 72 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1026; +> = 0.0; + +float maskWeight_73 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 73 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1027; +> = 0.0; + +float maskWeight_74 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 74 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1028; +> = 0.0; + +float maskWeight_75 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 75 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1029; +> = 0.0; + +float maskWeight_76 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 76 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1030; +> = 0.0; + +float maskWeight_77 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 77 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1031; +> = 0.0; + +float maskWeight_78 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 78 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1032; +> = 0.0; + +float maskWeight_79 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 79 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1033; +> = 0.0; + +float maskWeight_80 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 80 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1034; +> = 0.0; + +float maskWeight_81 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 81 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1035; +> = 0.0; + + + +Texture2D OcclusionTexture < + string UIGroup = "Occlusion"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Ambient Occlusion Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 401; + int UVEditorOrder = 2; +>; + +Texture2D ScatteringRadiusTexture < + string UIGroup = "SubSurfaceScattering"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "SSS Radius Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 209; + int UVEditorOrder = 2; +>; + +Texture2D CavityTexture < + string UIGroup = "Cavity"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Cavity Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 501; + int UVEditorOrder = 4; +>; + +Texture2D DiffuseTexture < + string UIGroup = "Diffuse"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Diffuse Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 201; + int UVEditorOrder = 1; +>; + +Texture2D SpecularTexture < + string UIGroup = "Specular"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Specular Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 302; + int UVEditorOrder = 4; +>; + +Texture2D NormalTexture < + string UIGroup = "Normal"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Normal Map"; + string ResourceType = "2D"; + int mipmaplevels = 0; // If mip maps exist in texture, Maya will load them. So user can pre-calculate and re-normalize mip maps for normal maps in .dds + int UIOrder = 601; + int UVEditorOrder = 5; +>; + +Texture2D MicroCavityTexture < + string UIGroup = "Micro Details"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Micro Cavity Map"; + string ResourceType = "2D"; + int mipmaplevels = 0; + int UIOrder = 701; + int UVEditorOrder = 5; +>; + +Texture2D MicroNormalTexture < + string UIGroup = "Micro Details"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Micro Normal Map"; + string ResourceType = "2D"; + int mipmaplevels = 0; + int UIOrder = 704; + int UVEditorOrder = 5; +>; + +#ifdef _SUPPORTTESSELLATION_ +Texture2D DisplacementTexture < + string UIGroup = "Tessellation and Displacement"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Displacement Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 902; + int UVEditorOrder = 8; +>; +#endif + +Texture2D BackScatteringThicknessTexture < + string UIGroup = "BackScattering"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Thickness Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 215; + int UVEditorOrder = 10; +>; + +Texture2D OpacityMaskTexture < + string UIGroup = "Opacity"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Opacity Mask"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 800; + int UVEditorOrder = 12; +>; + +TextureCube DiffuseCubeIBL < + string UIGroup = "IBL Settings"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Diffuse Cubemap"; + string ResourceType = "Cube"; + int mipmaplevels = 0; // Use (or load) max number of mip map levels so we can use blurring + int UIOrder = 108; + int UVEditorOrder = 10; +>; + +TextureCube SpecularCubeIBL : environment < + string UIGroup = "IBL Settings"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Specular Cubemap"; + string ResourceType = "Cube"; + int mipmaplevels = 0; + int UIOrder = 111; + int UVEditorOrder = 6; +>; + +//------------------------------------ +// Shadow Maps +//------------------------------------ +Texture2D light0ShadowMap : SHADOWMAP < + string Object = "Light 0"; // UI Group for lights, auto-closed + string UIWidget = "None"; + int UIOrder = 5010; +>; + +Texture2D light1ShadowMap : SHADOWMAP < + string Object = "Light 1"; + string UIWidget = "None"; + int UIOrder = 5020; +>; + +Texture2D light2ShadowMap : SHADOWMAP < + string Object = "Light 2"; + string UIWidget = "None"; + int UIOrder = 5030; +>; + +//------------------------------------ +// Internal depth textures for Maya depth-peeling transparency +//------------------------------------ +#ifdef _MAYA_ + +Texture2D transpDepthTexture : transpdepthtexture < + string UIWidget = "None"; +>; + +Texture2D opaqueDepthTexture : opaquedepthtexture < + string UIWidget = "None"; +>; + +#endif + +//------------------------------------ +// Per Frame parameters +//------------------------------------ +cbuffer UpdatePerFrame : register(b0) { + float4x4 viewInv : ViewInverse < string UIWidget = "None"; >; + float4x4 view : View < string UIWidget = "None"; >; + float4x4 prj : Projection < string UIWidget = "None"; >; + float4x4 viewPrj : ViewProjection < string UIWidget = "None"; >; + + // A shader may wish to do different actions when Maya is rendering the preview swatch (e.g. disable displacement) + // This value will be true if Maya is rendering the swatch + bool IsSwatchRender : MayaSwatchRender < string UIWidget = "None"; > = false; + float2 screenSize : ViewportPixelSize < string UIWidget = "None"; >; + + // If the user enables viewport gamma correction in Maya's global viewport rendering settings, the shader should not do gamma again + bool MayaFullScreenGamma : MayaGammaCorrection < string UIWidget = "None"; > = false; +} + + +//------------------------------------ +// Per Object parameters +//------------------------------------ +cbuffer UpdatePerObject : register(b1) { + float4x4 world : World < string UIWidget = "None"; >; + float4x4 worldIT : WorldInverseTranspose < string UIWidget = "None"; >; +#ifndef _SUPPORTTESSELLATION_ + float4x4 wvp : WorldViewProjection < string UIWidget = "None"; >; +#endif + +// --------------------------------------------- +// Lighting Settings GROUP +// --------------------------------------------- +bool LinearSpaceLighting < + string UIGroup = "Lighting Settings"; + string UIName = "Linear Space Lighting"; + int UIOrder = 100; +> = true; + +bool UseShadows < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string UIGroup = "Lighting Settings"; + string UIName = "Shadows"; + int UIOrder = 101; +#endif +> = true; + +float shadowMultiplier < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string UIGroup = "Lighting Settings"; + string UIWidget = "Slider"; + float UIMin = 0.000; + float UIMax = 1.000; + float UIStep = 0.001; + string UIName = "Shadow Strength"; + int UIOrder = 102; +#endif +> = { 1.0f }; + +// This offset allows you to fix any in-correct self shadowing caused by limited precision. +// This tends to get affected by scene scale and polygon count of the objects involved. +float shadowDepthBias : ShadowMapBias < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string UIGroup = "Lighting Settings"; + string UIWidget = "Slider"; + float UIMin = 0.000; + float UISoftMax = 10.000; + float UIStep = 0.001; + string UIName = "Shadow Bias"; + int UIOrder = 103; +#endif +> = { 0.01f }; + +// flips back facing normals to improve lighting for things like sheets of hair or leaves +bool flipBackfaceNormals < + string UIGroup = "Lighting Settings"; + string UIName = "Double Sided Lighting"; + int UIOrder = 104; +> = true; + +// -- light props are inserted here via UIOrder 20 - 49 + +// --------------------------------------------- +// IBL Settings GROUP +// --------------------------------------------- + +float SkyRotation < + string UIGroup = "IBL Settings"; + string UIName = "Sky Rotation"; + float UISoftMin = 0; + float UISoftMax = 360; + float UIMin = 0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 1; + int UIOrder = 105; + string UIWidget = "Slider"; +> = { 0.0f }; + +bool UseDiffuseIBLMap < + string UIGroup = "IBL Settings"; + string UIName = "Use Diffuse Cubemap"; + int UIOrder = 106; +> = false; + +float DiffuseIBLIntensity < + string UIGroup = "IBL Settings"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 2.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.001; + string UIName = "Diffuse IBL Intensity"; + int UIOrder = 107; +> = 1.0; + +bool UseSpecCubeIBL < + string UIGroup = "IBL Settings"; + string UIName = "Use Specular Cubemap"; + int UIOrder = 109; +> = false; + +float SpecularIBLIntensity < + string UIGroup = "IBL Settings"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 2.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.001; + string UIName = "Specular IBL Intensity"; + int UIOrder = 110; +> = 1.0; + +// --------------------------------------------- +// Diffuse GROUP +// --------------------------------------------- + +bool UseDiffuseTexture < + string UIGroup = "Diffuse"; + string UIName = "Use Diffuse Map"; + int UIOrder = 200; +> = false; + + +bool UseDiffuseTextureAlpha < + string UIGroup = "Diffuse"; + string UIName = "Use Diffuse Map Alpha"; + int UIOrder = 201; +> = false; + +float3 DiffuseColor : Diffuse < + string UIGroup = "Diffuse"; + string UIName = "Diffuse Color"; + string UIWidget = "ColorPicker"; + int UIOrder = 202; +> = { 1.0f, 1.0f, 1.0f }; + +// --------------------------------------------- +// SSS GROUP +// --------------------------------------------- + +float skinCoeffX < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Coeffient R"; + int UIOrder = 204; +> = 1.0; + +float skinCoeffY < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Coeffient G"; + int UIOrder = 205; +> = 0.5; + +float skinCoeffZ < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Coeffient B"; + int UIOrder = 206; +> = 0.25; + +float NormalBlurring < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Softness"; + int UIOrder = 207; +> = 0.25; + +bool UseScatteringRadiusTexture < + string UIGroup = "SubSurfaceScattering"; + string UIName = "Use SSS Radius Map"; + int UIOrder = 209; +> = false; + +float skinScattering < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Radius"; + int UIOrder = 210; +> = 0.25; + +float shadowBlur < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Shadow Blur"; + int UIOrder = 211; +> = 1.0; + +float shadowDither < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Shadow Dither"; + int UIOrder = 211; +> = 1.0; + +float shadowScattering < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Shadow Scattering"; + int UIOrder = 212; +> = 1.0; + +float shadowSaturation < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 4.0; + float UIMax = 4; + float UIStep = 0.1; + string UIName = "SSS Shadow Saturation"; + int UIOrder = 213; +> = 1.0; + +// --------------------------------------------- +// BackScattering GROUP +// --------------------------------------------- + +bool UseTranslucency < + string UIGroup = "BackScattering"; + string UIName = "Back Scattering"; + int UIOrder = 214; +> = false; + +bool UseThicknessTexture < + string UIGroup = "BackScattering"; + string UIName = "Use Thickness Map"; + int UIOrder = 216; +> = false; + +float skinScatteringRoughness < + string UIGroup = "BackScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "Back Scattering Width"; + int UIOrder = 217; +> = 1.0; + +/*float3 skinScatteringInnerColor < + string UIGroup = "BackScattering"; + string UIName = "Back Scattering Inner Color"; + string UIWidget = "ColorPicker"; + int UIOrder = 215; +> = {0.25f, 0.05f, 0.02f };*/ + +float3 skinScatteringOuterColor < + string UIGroup = "BackScattering"; + string UIName = "Back Scattering Color"; + string UIWidget = "ColorPicker"; + int UIOrder = 218; +> = { 0.25f, 0.05f, 0.02f }; + +float skinScatteringAmount < + string UIGroup = "BackScattering"; + float UIMin = 0.0; + float UISoftMax = 6.0; + float UIMax = 6; + float UIStep = 0.1; + string UIName = "Back Scattering Amount"; + int UIOrder = 219; +> = 1.0; + +float skinAmbientScatteringAmount < + string UIGroup = "BackScattering"; + float UIMin = 0.0; + float UISoftMax = 6.0; + float UIMax = 6; + float UIStep = 0.1; + string UIName = "Back Scattering Ambient Amount"; + int UIOrder = 220; +> = 1.0; + +/* float skinScatteringPlane < + string UIGroup = "BackScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "Back Scattering Far Plane"; + int UIOrder = 218; +> = 1.0;*/ + +// --------------------------------------------- +// Specular GROUP +// --------------------------------------------- + +bool UseSpecularTexture < + string UIGroup = "Specular"; + string UIName = "Use Specular Map"; + int UIOrder = 301; +> = false; + +bool UseSpecularTextureAlpha < + string UIGroup = "Specular"; + string UIName = "Use Roughness Map Alpha"; + int UIOrder = 301; +> = false; + +float3 SpecularColor : Specular < + string UIGroup = "Specular"; + string UIName = "Specular Color"; + string UIWidget = "ColorPicker"; + int UIOrder = 303; +> = { 1.0f, 1.0f, 1.0f }; + + +float LobeMix < + string UIGroup = "Specular"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1.0; + float UIStep = 0.01; + string UIName = "Lobe Mixing"; + int UIOrder = 304; +> = 0.75; + +float Roughness < + string UIGroup = "Specular"; + string UIWidget = "Slider"; + float UIMin = 0.01; + float UISoftMax = 1.0; + float UIMax = 1.0; + float UIStep = 0.01; + string UIName = "Roughness multiplier"; + int UIOrder = 305; +> = .2; + +// --------------------------------------------- +// Occlusion GROUP +// --------------------------------------------- + +bool UseAmbientOcclusionTexture < + string UIGroup = "Occlusion"; + string UIName = "Use Occlusion Map"; + int UIOrder = 400; +> = false; + +float OcclusionAmount < + string UIGroup = "Occlusion"; + string UIWidget = "Slider"; + float UIMin = 0.01; + float UISoftMax = 2.0; + float UIMax = 2.0; + float UIStep = 0.01; + string UIName = "Occlusion Amount"; + int UIOrder = 402; +> = 1.0; + +// --------------------------------------------- +// Cavity GROUP +// --------------------------------------------- + +bool UseCavityTexture < + string UIGroup = "Cavity"; + string UIName = "Use Cavity Map"; + int UIOrder = 500; +> = false; + +float CavityAmount < + string UIGroup = "Cavity"; + string UIWidget = "Slider"; + float UIMin = 0.01; + float UISoftMax = 2.0; + float UIMax = 2.0; + float UIStep = 0.01; + string UIName = "Cavity Amount"; + int UIOrder = 502; +> = 1.0; + +// --------------------------------------------- +// Normal GROUP +// --------------------------------------------- +bool UseNormalTexture < + string UIGroup = "Normal"; + string UIName = "Use Normal Map"; + int UIOrder = 600; +> = false; + +float NormalHeight < + string UIGroup = "Normal"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 5.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + string UIName = "Normal Height"; + int UIOrder = 603; +> = 1.0; + +bool SupportNonUniformScale < + string UIGroup = "Normal"; + string UIName = "Support Non-Uniform Scale"; + int UIOrder = 604; +> = true; + +int NormalCoordsysX < + string UIGroup = "Normal"; + string UIWidget = "Slider"; + float UIMin = 0; + float UIMax = 1; + float UIStep = 1; + string UIFieldNames = "Positive:Negative"; + string UIName = "Normal X (Red)"; + int UIOrder = 605; +> = 0; + +int NormalCoordsysY < + string UIGroup = "Normal"; + string UIWidget = "Slider"; + float UIMin = 0; + float UIMax = 1; + float UIStep = 1; + string UIFieldNames = "Positive:Negative"; + string UIName = "Normal Y (Green)"; + int UIOrder = 606; +> = 0; + +// --------------------------------------------- +// Micro Details GROUP +// --------------------------------------------- + +bool UseMicroCavityTexture < + string UIGroup = "Micro Details"; + string UIName = "Use Micro Cavity Map"; + int UIOrder = 700; +> = false; + +float MicroCavityAmount < + string UIGroup = "Micro Details"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 2.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + string UIName = "Micro Cavity Amount"; + int UIOrder = 702; +> = 1.0; + +bool UseMicroNormalTexture < + string UIGroup = "Micro Details"; + string UIName = "Use Micro Normal Map"; + int UIOrder = 703; +> = false; + +float MicroNormalHeight < + string UIGroup = "Micro Details"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 5.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + string UIName = "Micro Normal Height"; + int UIOrder = 705; +> = 1.0; + +float MicroScale < + string UIGroup = "Micro Details"; + string UIWidget = "Slider"; + float UIMin = 16.0; + float UISoftMax = 256.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + string UIName = "Micro Scale"; + int UIOrder = 706; +> = 32; + +// --------------------------------------------- +// Opacity GROUP +// --------------------------------------------- +float Opacity : OPACITY < + string UIGroup = "Opacity"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UIMax = 1.0; + float UIStep = 0.001; + string UIName = "Opacity"; + int UIOrder = 801; +> = 1.0; + +bool UseOpacityMaskTexture < + string UIGroup = "Opacity"; + string UIName = "Opacity Mask"; + int UIOrder = 802; +> = false; + +// at what value do we clip away pixels +float OpacityMaskBias < + string UIGroup = "Opacity"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UIMax = 1.0; + float UIStep = 0.001; + string UIName = "Opacity Mask Bias"; + int UIOrder = 803; +> = 0.1; + +#ifdef _SUPPORTTESSELLATION_ +// --------------------------------------------- +// Tessellation and Displacement GROUP +// --------------------------------------------- +int DisplacementModel < + string UIGroup = "Tessellation and Displacement"; + string UIName = "Displacement Model"; + string UIFieldNames = "Grayscale:Tangent Vector"; + float UIMin = 0; + float UIMax = 1; + float UIStep = 1; + int UIOrder = 900; +> = false; + +bool UseDisplacementMap < + string UIGroup = "Tessellation and Displacement"; + string UIName = "Displacement Map"; + int UIOrder = 901; +> = false; + +int VectorDisplacementCoordSys < + string UIGroup = "Tessellation and Displacement"; + string UIWidget = "Slider"; + string UIFieldNames = "Mudbox (XZY):Maya (XYZ)"; + string UIName = "Displacement Coordsys"; + float UIMin = 0; + float UIMax = 1; + float UIStep = 1; + int UIOrder = 903; +> = 0; + +float DisplacementHeight < + string UIGroup = "Tessellation and Displacement"; + float UISoftMin = 0.0; + float UISoftMax = 10.0; + string UIName = "Displacement Height"; + float UIMin = -(_3DSMAX_SPIN_MAX); + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.1; + int UIOrder = 904; +> = 0.5; + +// This allows you to control what the 'base' value for displacement is. +// When the offset value is 0.5, that means that a gray value (color: 128,128,128) will get 0 displacement. +// A value of 0 would then dent in. +// A value of 1 would then extrude. +float DisplacementOffset < + string UIGroup = "Tessellation and Displacement"; + float UISoftMin = -1.0; + float UISoftMax = 1.0; + float UIMin = -(_3DSMAX_SPIN_MAX); + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.1; + string UIName = "Displacement Offset"; + int UIOrder = 905; +> = 0.5; + +// This gives the artist control to prevent this shader from clipping away faces to quickly when displacement is actually keeping the faces on screen. +// This is also important for e.g. shadow map generation to make sure displaced vertices are not clipped out of the light's view +// See BBoxExtraScale for artist control over Maya clipping the entire object away when it thinks it leaves the view. +float DisplacementClippingBias < + string UIGroup = "Tessellation and Displacement"; + float UISoftMin = 0.0; + float UISoftMax = 99.0; + float UIMin = -(_3DSMAX_SPIN_MAX); + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.5; + string UIName = "Displacement Clipping Bias"; + int UIOrder = 906; +> = 5.0; + +// This gives the artist control to prevent maya from clipping away the entire object to fast in case displacement is used. +// Its semantic has to be BoundingBoxExtraScale +float BBoxExtraScale : BoundingBoxExtraScale < + string UIGroup = "Tessellation and Displacement"; + float UIMin = 1.0; + float UISoftMax = 10.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.5; + string UIName = "Bounding Box Extra Scale"; + int UIOrder = 907; +> = 1.0; + +float TessellationRange < + string UIGroup = "Tessellation and Displacement"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 999.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 1.0; + string UIName = "Tessellation Range"; + int UIOrder = 908; +> = { 0 }; + +float TessellationMin < + string UIGroup = "Tessellation and Displacement"; + float UIMin = 1.0; + float UISoftMax = 10.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.5; + string UIName = "Tessellation Minimum"; + int UIOrder = 909; +> = 3.0; + +float FlatTessellation < + string UIGroup = "Tessellation and Displacement"; + float UIMin = 0.0; + float UIMax = 1.0; + float UIStep = 0.1; + string UIName = "Flat Tessellation"; + int UIOrder = 910; +> = 0.0; +#endif + +// --------------------------------------------- +// UV assignment GROUP +// --------------------------------------------- +// Use the Surface Data Section to set your UVset names for each Texcoord. +// E.g. TexCoord1 = uv:UVset +// Then pick a Texcoord in the UV Section to use that UVset for a texture. + +int DiffuseTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Diffuse Map UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2002; +> = 0; + +int OcclusionTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Ambient Occlusion Map UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2003; +> = 1; + +int OpacityMaskTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Opacity Mask UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2005; +> = 0; + +int SpecularTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Specular Map UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2006; +> = 0; + +int NormalTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Normal Map UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2008; +> = 0; + +#ifdef _SUPPORTTESSELLATION_ +int DisplacementTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Displacement Map UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2010; +> = 0; +#endif + +int ThicknessTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Translucency Mask UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2011; +> = 0; +} //end UpdatePerObject cbuffer + +//------------------------------------ +// Light parameters +//------------------------------------ +cbuffer UpdateLights : register(b2) { +// --------------------------------------------- +// Light 0 GROUP +// --------------------------------------------- +// This value is controlled by Maya to tell us if a light should be calculated +// For example the artist may disable a light in the scene, or choose to see only the selected light +// This flag allows Maya to tell our shader not to contribute this light into the lighting +bool light0Enable : LIGHTENABLE < +string Object = "Light 0"; // UI Group for lights, auto-closed +string UIName = "Enable Light 0"; +int UIOrder = 20; +#ifdef _MAYA_ +> = false; // maya manages lights itself and defaults to no lights +#else +> = true; // in 3dsMax we should have the default light enabled +#endif + +// follows LightParameterInfo::ELightType +// spot = 2, point = 3, directional = 4, ambient = 5, +int light0Type : LIGHTTYPE < + string Object = "Light 0"; + string UIName = "Light 0 Type"; + string UIFieldNames = "None:Default:Spot:Point:Directional:Ambient"; + int UIOrder = 21; + float UIMin = 0; + float UIMax = 5; + float UIStep = 1; +> = 2; // default to spot so the cone angle etc work when "Use Shader Settings" option is used + +float3 light0Pos : POSITION < + string Object = "Light 0"; + string UIName = "Light 0 Position"; + string Space = "World"; + int UIOrder = 22; + int RefID = 0; // 3DSMAX +> = { 100.0f, 100.0f, 100.0f }; + +float3 light0Color : LIGHTCOLOR < + string Object = "Light 0"; +#ifdef _3DSMAX_ + int LightRef = 0; + string UIWidget = "None"; +#else + string UIName = "Light 0 Color"; + string UIWidget = "Color"; + int UIOrder = 23; +#endif +> = { 1.0f, 1.0f, 1.0f }; + +float light0Intensity : LIGHTINTENSITY < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 0"; + string UIName = "Light 0 Intensity"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 24; +#endif +> = { 1.0f }; + +float3 light0Dir : DIRECTION < + string Object = "Light 0"; + string UIName = "Light 0 Direction"; + string Space = "World"; + int UIOrder = 25; + int RefID = 0; // 3DSMAX +> = { 100.0f, 100.0f, 100.0f }; + +#ifdef _MAYA_ +float light0ConeAngle : HOTSPOT // In radians +#else +float light0ConeAngle : LIGHTHOTSPOT +#endif +< + string Object = "Light 0"; +#ifdef _3DSMAX_ + int LightRef = 0; + string UIWidget = "None"; +#else + string UIName = "Light 0 Cone Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 26; +#endif +> = { 0.46f }; + +#ifdef _MAYA_ +float light0FallOff : FALLOFF // In radians. Sould be HIGHER then cone angle or lighted area will invert +#else +float light0FallOff : LIGHTFALLOFF +#endif +< + string Object = "Light 0"; +#ifdef _3DSMAX_ + int LightRef = 0; + string UIWidget = "None"; +#else + string UIName = "Light 0 Penumbra Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 27; +#endif +> = { 0.7f }; + +float light0AttenScale : DECAYRATE < + string Object = "Light 0"; + string UIName = "Light 0 Decay"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 28; +> = { 0.0 }; + +bool light0ShadowOn : SHADOWFLAG < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 0"; + string UIName = "Light 0 Casts Shadow"; + string UIWidget = "None"; + int UIOrder = 29; +#endif +> = true; + +float4x4 light0Matrix : SHADOWMAPMATRIX < + string Object = "Light 0"; + string UIWidget = "None"; +>; + +// --------------------------------------------- +// Light 1 GROUP +// --------------------------------------------- +bool light1Enable : LIGHTENABLE < + string Object = "Light 1"; + string UIName = "Enable Light 1"; + int UIOrder = 30; +> = false; + +int light1Type : LIGHTTYPE < + string Object = "Light 1"; + string UIName = "Light 1 Type"; + string UIFieldNames = "None:Default:Spot:Point:Directional:Ambient"; + float UIMin = 0; + float UIMax = 5; + int UIOrder = 31; +> = 2; + +float3 light1Pos : POSITION < + string Object = "Light 1"; + string UIName = "Light 1 Position"; + string Space = "World"; + int UIOrder = 32; + int RefID = 1; // 3DSMAX +> = { -100.0f, 100.0f, 100.0f }; + +float3 light1Color : LIGHTCOLOR < + string Object = "Light 1"; +#ifdef _3DSMAX_ + int LightRef = 1; + string UIWidget = "None"; +#else + string UIName = "Light 1 Color"; + string UIWidget = "Color"; + int UIOrder = 33; +#endif +> = { 1.0f, 1.0f, 1.0f }; + +float light1Intensity : LIGHTINTENSITY < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 1"; + string UIName = "Light 1 Intensity"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 34; +#endif +> = { 1.0f }; + +float3 light1Dir : DIRECTION < + string Object = "Light 1"; + string UIName = "Light 1 Direction"; + string Space = "World"; + int UIOrder = 35; + int RefID = 1; // 3DSMAX +> = { 100.0f, 100.0f, 100.0f }; + +#ifdef _MAYA_ +float light1ConeAngle : HOTSPOT // In radians +#else +float light1ConeAngle : LIGHTHOTSPOT +#endif +< + string Object = "Light 1"; +#ifdef _3DSMAX_ + int LightRef = 1; + string UIWidget = "None"; +#else + string UIName = "Light 1 Cone Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 36; +#endif +> = { 45.0f }; + +#ifdef _MAYA_ +float light1FallOff : FALLOFF // In radians. Sould be HIGHER then cone angle or lighted area will invert +#else +float light1FallOff : LIGHTFALLOFF +#endif +< + string Object = "Light 1"; +#ifdef _3DSMAX_ + int LightRef = 1; + string UIWidget = "None"; +#else + string UIName = "Light 1 Penumbra Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 37; +#endif +> = { 0.0f }; + +float light1AttenScale : DECAYRATE < + string Object = "Light 1"; + string UIName = "Light 1 Decay"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 38; +> = { 0.0 }; + +bool light1ShadowOn : SHADOWFLAG < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 1"; + string UIName = "Light 1 Casts Shadow"; + string UIWidget = "None"; + int UIOrder = 39; +#endif +> = true; + +float4x4 light1Matrix : SHADOWMAPMATRIX < + string Object = "Light 1"; + string UIWidget = "None"; +>; + +// --------------------------------------------- +// Light 2 GROUP +// --------------------------------------------- +bool light2Enable : LIGHTENABLE < + string Object = "Light 2"; + string UIName = "Enable Light 2"; + int UIOrder = 40; +> = false; + +int light2Type : LIGHTTYPE < + string Object = "Light 2"; + string UIName = "Light 2 Type"; + string UIFieldNames = "None:Default:Spot:Point:Directional:Ambient"; + float UIMin = 0; + float UIMax = 5; + int UIOrder = 41; +> = 2; + +float3 light2Pos : POSITION < + string Object = "Light 2"; + string UIName = "Light 2 Position"; + string Space = "World"; + int UIOrder = 42; + int RefID = 2; // 3DSMAX +> = { 100.0f, 100.0f, -100.0f }; + +float3 light2Color : LIGHTCOLOR < + string Object = "Light 2"; +#ifdef _3DSMAX_ + int LightRef = 2; + string UIWidget = "None"; +#else + string UIName = "Light 2 Color"; + string UIWidget = "Color"; + int UIOrder = 43; +#endif +> = { 1.0f, 1.0f, 1.0f }; + +float light2Intensity : LIGHTINTENSITY < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 2"; + string UIName = "Light 2 Intensity"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 44; +#endif +> = { 1.0f }; + +float3 light2Dir : DIRECTION < + string Object = "Light 2"; + string UIName = "Light 2 Direction"; + string Space = "World"; + int UIOrder = 45; + int RefID = 2; // 3DSMAX +> = { 100.0f, 100.0f, 100.0f }; + +#ifdef _MAYA_ +float light2ConeAngle : HOTSPOT // In radians +#else +float light2ConeAngle : LIGHTHOTSPOT +#endif +< + string Object = "Light 2"; +#ifdef _3DSMAX_ + int LightRef = 2; + string UIWidget = "None"; +#else + string UIName = "Light 2 Cone Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 46; +#endif +> = { 45.0f }; + +#ifdef _MAYA_ +float light2FallOff : FALLOFF // In radians. Sould be HIGHER then cone angle or lighted area will invert +#else +float light2FallOff : LIGHTFALLOFF +#endif +< +string Object = "Light 2"; +#ifdef _3DSMAX_ + int LightRef = 2; + string UIWidget = "None"; +#else + string UIName = "Light 2 Penumbra Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 47; +#endif +> = { 0.0f }; + +float light2AttenScale : DECAYRATE < + string Object = "Light 2"; + string UIName = "Light 2 Decay"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 48; +> = { 0.0 }; + +bool light2ShadowOn : SHADOWFLAG < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 2"; + string UIName = "Light 2 Casts Shadow"; + string UIWidget = "None"; + int UIOrder = 49; +#endif +> = true; + +float4x4 light2Matrix : SHADOWMAPMATRIX < + string Object = "Light 2"; + string UIWidget = "None"; +>; + +} //end lights cbuffer + +//------------------------------------ +// Structs +//------------------------------------ +struct APPDATA { + float3 position : POSITION; + float2 texCoord0 : TEXCOORD0; + float2 texCoord1 : TEXCOORD1; + float2 texCoord2 : TEXCOORD2; + float3 normal : NORMAL; + float3 binormal : BINORMAL; + float3 tangent : TANGENT; +}; + +struct SHADERDATA { + float4 position : SV_Position; + float2 texCoord0 : TEXCOORD0; + float2 texCoord1 : TEXCOORD1; + float2 texCoord2 : TEXCOORD2; + float3 worldNormal : NORMAL; + float4 worldTangent : TANGENT; + float3 worldPosition : TEXCOORD3; + float4 screenCoord : TEXCOORD14; + +#ifdef _SUPPORTTESSELLATION_ + // Geometry generated control points: + // .worldPosition is CP0, so we don't need to store it again + float3 CP1 : TEXCOORD4; + float3 CP2 : TEXCOORD5; + + // PN-AEN with displacement fix: + float4 dominantEdge : TEXCOORD6; // both vertices of an edge + float2 dominantVertex : TEXCOORD7; // corner + + // Dominant normal and tangent for VDM crack fix: + // this could be compacted into less texcoords, but left as-is for readability + float3 dominantNormalE0 : TEXCOORD8; + float3 dominantNormalE1 : TEXCOORD9; + float3 dominantNormalCorner : TEXCOORD10; + + float3 dominantTangentE0 : TEXCOORD11; + float3 dominantTangentE1 : TEXCOORD12; + float3 dominantTangentCorner : TEXCOORD13; + + float clipped : CLIPPED; +#endif +}; + + +#ifdef _SUPPORTTESSELLATION_ +struct HSCONSTANTDATA { + float TessFactor[3] : SV_TessFactor; // tessellation amount for each edge of patch + float InsideTessFactor : SV_InsideTessFactor; // tessellation amount within a patch surface (would be float2 for quads) + float3 CPCenter : CENTER; // Geometry generated center control point +}; +#endif + +//------------------------------------ +// BRDF +//------------------------------------ + +float sqr(float x) { + return x*x; +} + +// [Beckmann 1963, "The scattering of electromagnetic waves from rough surfaces"] +float D_Beckmann(float Roughness, float NoH) { + float m = Roughness; + float m2 = m * m; + + float NdotH2 = sqr(NoH); + return exp((NdotH2 - 1) / (m2 * NdotH2)) / (PI * m2 * NdotH2 * NdotH2); +} + +// This function is from Nvidia's Human Head demo +float D_BeckmannNVIDIA(float m, float ndoth) { + float alpha = acos(ndoth); + float ta = tan(alpha); + float val = 1.0 / (m*m*pow(ndoth, 4.0)) * exp(-(ta*ta) / (m*m)); + return val; +} + +// Schlick 1994, "An Inexpensive BRDF Model for Physically-Based Rendering" +// Lagarde 2012, "Spherical Gaussian approximation for Blinn-Phong, Phong and Fresnel" +float3 F_Schlick(float3 SpecularColor, float LdotH) { + return SpecularColor + (1.0f - SpecularColor) * exp2((-5.55473 * LdotH - 6.98316) * LdotH); +} + +// Schlick 1994, "An Inexpensive BRDF Model for Physically-Based Rendering" +// Lagarde 2011, "Adopting a physically based shading model" +// Lagarde 2012, "Spherical Gaussian approximation for Blinn-Phong, Phong and Fresnel" +float3 F_LagardeSchlick(float3 SpecularColor, float Roughness, float NdotV) { + return SpecularColor + (max(1 - Roughness, SpecularColor) - SpecularColor) * exp2((-5.55473 * NdotV - 6.98316) * NdotV); +} + +float3 F_KelemenSzirmaykalos(float3 H, float3 V, float3 F0) { + float base = 1.0 - dot(V, H); + float exponential = pow(base, 5.0); + return exponential + F0 * (1.0 - exponential); +} + +float3 KelemenSzirmaykalos(float3 N, float3 L, float3 V, float roughness, float3 specular) { + float3 result = float3(0.0, 0.0, 0.0); + float NdotL = dot(N, L); + + if (NdotL > 0.0) { + float3 h = L + V; + float3 H = normalize(h); + float NdotH = dot(N, H); + float VdotH = dot(V, H); + float D = D_BeckmannNVIDIA(roughness, NdotH); + float3 F = F_Schlick(specular, VdotH); + float G = 1; + float3 specularDirect = max(D * G * F / dot(h, h), 0); + result = specularDirect * NdotL; // Specular is added for more tuning + } + return result; +} + +float3 PennerSkin(float3 skinCoef, float3 N, float3 L, float3 Nlow, float Curvature) { + float3 pennerX = lerp(N, Nlow, skinCoef.x); + float3 pennerY = lerp(N, Nlow, skinCoef.y); + float3 pennerZ = lerp(N, Nlow, skinCoef.z); + + float3 pennerNdotL = float3(dot(pennerX, L), dot(pennerY, L), dot(pennerZ, L)); + pennerNdotL = saturate(pennerNdotL * 0.5 + 0.5); + + float3 pennerlookUp; + pennerlookUp.r = LutTexture.Sample(SamplerAnisoClamp, float2(pennerNdotL.r, Curvature)).r; + pennerlookUp.g = LutTexture.Sample(SamplerAnisoClamp, float2(pennerNdotL.g, Curvature)).g; + pennerlookUp.b = LutTexture.Sample(SamplerAnisoClamp, float2(pennerNdotL.b, Curvature)).b; + + return pennerlookUp; +} + +float3 PennerSkinNoLUT(float3 skinCoef, float3 N, float3 L, float3 Nlow) { + float3 pennerX = lerp(N, Nlow, skinCoef.x); + float3 pennerY = lerp(N, Nlow, skinCoef.y); + float3 pennerZ = lerp(N, Nlow, skinCoef.z); + + float3 pennerNdotL = float3(dot(pennerX, L), dot(pennerY, L), dot(pennerZ, L)); + + float3 pennerlookUp; + pennerlookUp.r = saturate(pennerNdotL.r*(float3(1, 1, 1).r - skinCoef.r) + skinCoef.r) * (1 - skinCoef.r); + pennerlookUp.g = saturate(pennerNdotL.g*(float3(1, 1, 1).g - skinCoef.g) + skinCoef.g) * (1 - skinCoef.g); + pennerlookUp.b = saturate(pennerNdotL.b*(float3(1, 1, 1).b - skinCoef.b) + skinCoef.b) * (1 - skinCoef.b); + + return pennerlookUp; +} + +float3 diffuseSkinIBL(float3 skinCoef, float3 diffuseIBL_HighFreq, float3 diffuseIBL_LowFreq) { + return lerp(diffuseIBL_HighFreq, diffuseIBL_LowFreq, skinCoef); +} + +//------------------------------------ +// Functions +//------------------------------------ + +float4 ComputeScreenPos(float4 pos) { +#if UNITY_UV_STARTS_AT_TOP + float scale = -1.0; +#else + float scale = 1.0; +#endif + + float4 o = pos * 0.5f; + o.xy = float2(o.x, o.y*scale) + o.w; + o.zw = pos.zw; + + return o; +} + +// Occlusion taking into account the color of the texture multiplied to it +float3 coloredOcclusion(float3 color, float occlusion) { + float3 coloredOcclusion = lerp(float3(1.0f, 1.0f, 1.0f), color, (1 - occlusion)); + //color *= coloredOcclusion; + return coloredOcclusion; +} + +float specularOcclusion(float3 N, float3 V, float Occlusion) { + const float specularPow = 5.0; + float NdotV = dot(N, V); + float s = saturate(-0.3 + NdotV * NdotV); + + return lerp(pow(Occlusion, specularPow), 1.0, s); +} + +float2 pickTexcoord(int index, float2 t0, float2 t1, float2 t2) { + float2 tcoord = t0; + + if (index == 1) { + tcoord = t1; + } else if (index == 2) { + tcoord = t2; + } + + return tcoord; +} + +float3 RotateVectorYaw(float3 vec, float degreeOfRotation) { + float3 rotatedVec = vec; + float angle = radians(degreeOfRotation); + + rotatedVec.x = (cos(angle) * vec.x) - (sin(angle) * vec.z); + rotatedVec.z = (sin(angle) * vec.x) + (cos(angle) * vec.z); + + return rotatedVec; +} + +// Spot light cone +float lightConeangle(float coneAngle, float coneFalloff, float3 lightVec, float3 lightDir) { + // the cone falloff should be equal or bigger then the coneAngle or the light inverts + // this is added to make manually tweaking the spot settings easier. + if (coneFalloff < coneAngle) { + coneFalloff = coneAngle; + } + + float LdotDir = dot(normalize(lightVec), lightDir); + + // cheaper cone, no fall-off control would be: + // float cone = pow(saturate(LdotDir), 1 / coneAngle); + + // higher quality cone (more expensive): + float cone = smoothstep(cos(coneFalloff), cos(coneAngle), LdotDir); + + return cone; +} + +#define SHADOW_FILTER_TAPS_CNT 10 + +float2 SuperFilterTaps[SHADOW_FILTER_TAPS_CNT] < string UIWidget = "None"; > = { + { -0.84052f, -0.073954f }, + { -0.326235f, -0.40583f }, + { -0.698464f, 0.457259f }, + { -0.203356f, 0.6205847f }, + { 0.96345f, -0.194353f }, + { 0.473434f, -0.480026f }, + { 0.519454f, 0.767034f }, + { 0.185461f, -0.8945231f }, + { 0.507351f, 0.064963f }, + { -0.321932f, 0.5954349f } +}; + +static float4 kernel[25] = { + { 0.530605, 0.613514, 0.739601, 0 }, + { 0.000973794, 1.11862e-005, 9.43437e-007, -3 }, + { 0.00333804, 7.85443e-005, 1.2945e-005, -2.52083 }, + { 0.00500364, 0.00020094, 5.28848e-005, -2.08333 }, + { 0.00700976, 0.00049366, 0.000151938, -1.6875 }, + { 0.0094389, 0.00139119, 0.000416598, -1.33333 }, + { 0.0128496, 0.00356329, 0.00132016, -1.02083 }, + { 0.017924, 0.00711691, 0.00347194, -0.75 }, + { 0.0263642, 0.0119715, 0.00684598, -0.520833 }, + { 0.0410172, 0.0199899, 0.0118481, -0.333333 }, + { 0.0493588, 0.0367726, 0.0219485, -0.1875 }, + { 0.0402784, 0.0657244, 0.04631, -0.0833333 }, + { 0.0211412, 0.0459286, 0.0378196, -0.0208333 }, + { 0.0211412, 0.0459286, 0.0378196, 0.0208333 }, + { 0.0402784, 0.0657244, 0.04631, 0.0833333 }, + { 0.0493588, 0.0367726, 0.0219485, 0.1875 }, + { 0.0410172, 0.0199899, 0.0118481, 0.333333 }, + { 0.0263642, 0.0119715, 0.00684598, 0.520833 }, + { 0.017924, 0.00711691, 0.00347194, 0.75 }, + { 0.0128496, 0.00356329, 0.00132016, 1.02083 }, + { 0.0094389, 0.00139119, 0.000416598, 1.33333 }, + { 0.00700976, 0.00049366, 0.000151938, 1.6875 }, + { 0.00500364, 0.00020094, 5.28848e-005, 2.08333 }, + { 0.00333804, 7.85443e-005, 1.2945e-005, 2.52083 }, + { 0.000973794, 1.11862e-005, 9.43437e-007, 3 } +}; + + +static float2 kernelRandom[32] = { + { 0.254395, 0.385445 }, + { -0.139177, 0.571074 }, + { -0.453510, 0.962140 }, + { 0.482684, 0.346190 }, + { 0.889741, 0.724799 }, + { -0.661047, -0.137344 }, + { -0.193311, -0.313475 }, + { 0.363177, -0.960291 }, + { -0.225866, -0.654962 }, + { 0.407875, 0.431522 }, + { -0.543008, -0.992827 }, + { -0.878493, -0.896999 }, + { -0.641776, 0.130757 }, + { -0.785279, -0.015190 }, + { 0.469054, 0.248633 }, + { -0.820410, -0.562833 }, + { 0.174019, -0.618069 }, + { -0.906449, -0.275099 }, + { -0.655285, -0.956021 }, + { 0.453776, -0.085425 }, + { -0.430788, -0.089530 }, + { -0.587370, -0.851826 }, + { 0.149056, -0.474322 }, + { 0.228684, 0.321661 }, + { -0.668752, -0.829400 }, + { -0.729554, 0.438250 }, + { -0.467018, -0.252882 }, + { 0.090398, 0.618760 }, + { 0.741840, 0.516401 }, + { -0.983891, 0.248701 }, + { -0.162010, -0.714455 }, + { 0.308825, 0.787175 } +}; + +float shadowMapTexelSize < string UIWidget = "None"; > = { 0.00195313 }; // (1.0f / 512) + +// Shadows: +// Percentage-Closer Filtering +float3 lightShadow(float4x4 LightViewPrj, uniform Texture2D ShadowMapTexture, float3 VertexWorldPosition, float2 screenCoord, float skinRadius, float2 size) { + float4 dither = 2.0 * DitherTexture.SampleLevel(SamplerAnisoWrap, screenCoord.xy * size / 128, 0) - 1.0; + float2x2 rotationMatrix = float2x2(dither.x, dither.y, -dither.y, dither.x); + + float ditherShadow = 0; + float shadowColored = 0; + + float4 Pndc = mul(float4(VertexWorldPosition.xyz, 1.0), LightViewPrj); + Pndc.xyz /= Pndc.w; + + if (Pndc.x > -1.0f && Pndc.x < 1.0f && Pndc.y > -1.0f && Pndc.y < 1.0f && Pndc.z > 0.0f && Pndc.z < 1.0f) { + float2 uv = 0.5f * Pndc.xy + 0.5f; + uv = float2(uv.x, (1.0 - uv.y)); // maya flip Y + float z = Pndc.z - shadowDepthBias / Pndc.w; + + screenCoord.y = 1 - screenCoord.y; + + float shadowDepth = skinRadius; + shadowDepth *= 4.0; + + for (int i = 0; i < 32; ++i) { + float2 offset = kernelRandom[i] * shadowDepth * shadowMapTexelSize; + float2 ditherOffset = mul(offset, rotationMatrix); + ditherOffset = lerp(offset, ditherOffset, shadowDither); + float3 sample = z - ShadowMapTexture.SampleLevel(SamplerShadowDepth, uv + ditherOffset, 0).x; + + ditherShadow += (sample >= 0.0f) ? 0.0f : (1.0f / 32); + } + } + + return ditherShadow; +} + +float3 lightShadowSkin(float4x4 LightViewPrj, uniform Texture2D ShadowMapTexture, float3 VertexWorldPosition, float2 screenCoord, float skinRadius, float2 size, float2 dir) { + + float4 dither = 2.0 * DitherTexture.SampleLevel(SamplerAnisoWrap, screenCoord.xy * size / 128, 0) - 1.0; + float2x2 rotationMatrix = float2x2(dither.x, dither.y, -dither.y, dither.x); + + float ditherShadow = 0; + float3 shadowColored = float3(0, 0, 0); + + float4 Pndc = mul(float4(VertexWorldPosition.xyz, 1.0), LightViewPrj); + Pndc.xyz /= Pndc.w; + if (Pndc.x > -1.0f && Pndc.x < 1.0f && Pndc.y > -1.0f && Pndc.y < 1.0f && Pndc.z > 0.0f && Pndc.z < 1.0f) { + float2 uv = 0.5f * Pndc.xy + 0.5f; + uv = float2(uv.x, (1.0 - uv.y)); // maya flip Y + + float z = Pndc.z - shadowDepthBias / Pndc.w; + screenCoord.y = 1 - screenCoord.y; + + float shadowDepth = skinRadius; + shadowDepth *= 4.0; + + for (int i = 0; i < 25; ++i) { + float2 offset = kernel[i].a * dir * shadowDepth * shadowMapTexelSize; + offset = mul(offset, rotationMatrix); + float3 sample = z - ShadowMapTexture.SampleLevel(SamplerShadowDepth, uv + offset, 0).x; + ditherShadow = (sample >= 0.0f) ? 0.0f : 1.0f; + + shadowColored += ditherShadow * kernel[i].rgb; + } + } + + return shadowColored; +} + +#ifdef _SUPPORTTESSELLATION_ +// Pick dominant for crack free displacement (original function by Bryan Dudash, modified to support any float3) +float3 PickDominant(float3 vec, // vector to change + float U, float V, float W, // barycoords + float3 DE0A, float3 DE0B, // domimant edge 0 vertex A and B + float3 DE1A, float3 DE1B, // domimant edge 1 vertex A and B + float3 DE2A, float3 DE2B, // domimant edge 2 vertex A and B + float3 DV0, float3 DV1, float3 DV2) { // dominant corners + // Override the texture coordinates along the primitive edges and at the corners. + // Keep the original interpolated coords for the inner area of the primitive. + + float3 dominantVector = vec; + + float edgeThreshold = 0.0001f; + float edgeU = (U == 0) ? 1 : 0; + float edgeV = (V == 0) ? 1 : 0; + float edgeW = (W == 0) ? 1 : 0; + + float corner = ((edgeU + edgeV + edgeW) == 2) ? 1 : 0; // two are 0, means we are a corner + float edge = ((edgeU + edgeV + edgeW) == 1) ? 1 : 0; // one of them is 0, means we are an edge + float innerarea = ((edgeU + edgeV + edgeW) == 0) ? 1 : 0; // none are 0, means we are interior + + if (innerarea != 1) { + // Note: the order of the vertices/edges we choose here can be different per application + // and depend on how the index buffer was generated. + // These work for Maya with its PN-AEN18 primitive generator + if (corner) { + if (U > 1.0 - edgeThreshold) + dominantVector = DV1; + else if (V > 1.0 - edgeThreshold) + dominantVector = DV2; + else if (W > 1.0 - edgeThreshold) + dominantVector = DV0; + } else { + if (edgeU) + dominantVector = lerp(DE2A, DE2B, W); + else if (edgeV) + dominantVector = lerp(DE0A, DE0B, U); + else + dominantVector = lerp(DE1A, DE1B, V); + } + } + + return dominantVector; +} + +// outside of view? +float IsClipped(float4 clipPos) { + float W = clipPos.w + DisplacementClippingBias; // bias allows artist to control to early clipping due to displacement + // Test whether the position is entirely inside the view frustum. + return (-W <= clipPos.x && clipPos.x <= W && -W <= clipPos.y && clipPos.y <= W && -W <= clipPos.z && clipPos.z <= W) ? 0.0f : 1.0f; +} + +// Compute whether all three control points along the edge are outside of the view frustum. +// By doing this, we're ensuring that +// 1.0 means clipped, 0.0 means unclipped. +float ComputeClipping(float3 cpA, float3 cpB, float3 cpC) { + // Compute the projected position for each position, then check to see whether they are clipped. + float4 projPosA = mul(float4(cpA, 1), viewPrj), projPosB = mul(float4(cpB, 1), viewPrj), projPosC = mul(float4(cpC, 1), viewPrj); + return min(min(IsClipped(projPosA), IsClipped(projPosB)), IsClipped(projPosC)); +} + +// PN Triangles and PN-AEN control points: +float3 ComputeCP(float3 posA, float3 posB, float3 normA) { + return (2.0f * posA + posB - (dot((posB - posA), normA) * normA)) / 3.0f; +} +#endif + +// Clip pixel away when opacity mask is used +void OpacityMaskClip(float2 uv) { + if (UseOpacityMaskTexture) { + float OpacityMaskMap = OpacityMaskTexture.Sample(SamplerAnisoWrap, uv).x; + + // clip value when less then 0 for punch-through alpha. + clip(OpacityMaskMap < OpacityMaskBias ? -1 : 1); + } +} + + +// Calculate a light: +struct lightOut { + float Specular; + float3 Color; +}; + +lightOut CalculateLight(bool lightEnable, int lightType, float lightAtten, float3 lightPos, float3 vertWorldPos, + float3 lightColor, float lightIntensity, float3 lightDir, float lightConeAngle, float lightFallOff, float4x4 lightViewPrjMatrix, + uniform Texture2D lightShadowMap, bool lightShadowOn, float3 vertexNormal, float3 normal, float3 diffuseColorIn, + float3 eyeVec, float roughness, float3 specularColorIn, float3 thickness, float softenMask, + float gammaCorrection, float opacity, float3 ambientOcclusion, float3 skinOcclusion, float2 screenCoord, float2 size, float scatteringRadius) { + lightOut OUT = (lightOut)0; + + OUT.Specular = 0.0; + OUT.Color = float3(0, 0, 0); + + if (lightEnable) { + // For Maya, flip the lightDir: +#ifdef _MAYA_ + lightDir = -lightDir; +#endif + + bool isAmbientLight = (lightType == 5); + if (isAmbientLight) { + OUT.Color = diffuseColorIn * lightColor * lightIntensity; + OUT.Color.rgb *= ambientOcclusion; + return OUT; + } + + bool isDirectionalLight = (lightType == 4); + float3 lightVec = lerp(lightPos - vertWorldPos, lightDir, isDirectionalLight); + + float3 L = normalize(lightVec); + + // Diffuse: + float3 diffuseDirect = float3(0, 0, 0); + float3 scatter = float3(skinCoeffX, skinCoeffY, skinCoeffZ); + diffuseDirect = PennerSkin(scatter, normal, L, vertexNormal, 1 - (scatteringRadius*skinScattering)) * diffuseColorIn; + //diffuseDirect = PennerSkinNoLUT(scatter,normal,L, vertexNormal) * diffuseColorIn; + + // Specular: + float3 specularDirect = float3(0, 0, 0); + + float3 Lobe1 = KelemenSzirmaykalos(normal, L, eyeVec, roughness, specularColorIn); + float3 Lobe2 = KelemenSzirmaykalos(normal, L, eyeVec, roughness*0.5, specularColorIn); + + specularDirect = Lobe2 * LobeMix + Lobe1 * (1 - LobeMix); + + // Light Attenuation: + bool enableAttenuation = lightAtten > 0.0001f; + float attenuation = 1.0f; + if (!isDirectionalLight) { + attenuation = lerp(1.0, 1 / pow(length(lightVec), lightAtten), enableAttenuation); + } + + // Spot light Cone Angle: + float angle = 1; + if (lightType == 2) { + angle = lightConeangle(lightConeAngle, lightFallOff, lightVec, lightDir); + } + + // Shadows: + float shadow = 1; + float3 skinShadow = float3(1, 1, 1); + float3 softShadow = float3(1, 1, 1); + if (UseShadows && lightShadowOn) { + shadow = lightShadow(lightViewPrjMatrix, lightShadowMap, vertWorldPos, screenCoord, shadowBlur, size); + + skinShadow = LutTexture.Sample(SamplerAnisoClamp, float2(shadow * angle, 1 - shadowScattering)); + skinShadow = lerp(dot(float3(0.33, 0.59, 0.11), skinShadow), skinShadow, shadowSaturation); + skinShadow = lerp(skinShadow, 1, (shadow* angle)*(shadow* angle)*(shadow* angle)); + } + + float3 lightAttenuation = lightIntensity * angle * attenuation * lightColor; + + diffuseDirect *= lightIntensity * skinShadow * attenuation * lightColor; + specularDirect *= lightAttenuation * shadow; + + float3 backScattering = float3(0, 0, 0); + if (UseTranslucency) { + half backRoughness = (1 - skinScatteringRoughness) * 128; + float3 viewScattering = exp2(saturate(dot(eyeVec, -(L + (normal * 0.01)))) * backRoughness - backRoughness) * skinScatteringAmount; + float3 lightScattering = saturate(dot(-L, normal)*0.5 + 0.5) * skinAmbientScatteringAmount; + + //float3 IBLScattering = diffuseIBL; + backScattering = (viewScattering + lightScattering) * lightAttenuation * shadow * thickness; + + float3 profile = skinScatteringOuterColor * backScattering; + backScattering = profile * skinScatteringAmount; + + + /*float scale = 2e4 * (1.0 - skinScatteringAmount) / backRoughness; + + float4 shrinkedPos = float4(vertWorldPos - 0.005 * vertexNormal, 1.0); + + float4 shadowPosition = mul(shrinkedPos, lightViewPrjMatrix); + + float d1 = lightShadowMap.Sample(SamplerShadowDepth, shadowPosition.xy / shadowPosition.w); // 'd1' has a range of 0..1 + + float d2 = shadowPosition.z; // 'd2' has a range of 0..'lightFarPlane' + d1 *= skinScatteringPlane*shadowPosition.w; // So we scale 'd1' accordingly: + float d = scale * abs(d1 - d2); + + float dd = -d * d; + float3 profile = float3(0.233, 0.455, 0.649) * exp(dd / 0.0064) + + float3(0.1, 0.336, 0.344) * exp(dd / 0.0484) + + float3(0.118, 0.198, 0.0) * exp(dd / 0.187) + + float3(0.113, 0.007, 0.007) * exp(dd / 0.567) + + float3(0.358, 0.004, 0.0) * exp(dd / 1.99) + + float3(0.078, 0.0, 0.0) * exp(dd / 7.41); + backScattering = profile * saturate((0.3 + dot(L, -vertexNormal)) / 1.3) * thickness * diffuseColorIn; */ + } + + OUT.Color += diffuseDirect * skinOcclusion; + OUT.Color *= opacity; + OUT.Color += specularDirect * ambientOcclusion + backScattering; + + // Output specular and rim for opacity: + // OUT.Specular = dot(saturate(specularColor), float3(0.3f, 0.6f, 0.1f)); + } // end if light enabled + + return OUT; +} + +//------------------------------------ +// vertex shader with tessellation +//------------------------------------ +// take inputs from 3d-app +// vertex animation/skinning would happen here +SHADERDATA vt(APPDATA IN) { + SHADERDATA OUT = (SHADERDATA)0; + + // we pass vertices in world space + float4 worldPos = mul(float4(IN.position, 1), world); + OUT.worldPosition.xyz = worldPos.xyz; + +#ifdef _SUPPORTTESSELLATION_ + OUT.position = worldPos; +#else + OUT.position = float4(IN.position.xyz, 1); +#endif + + OUT.screenCoord = mul(float4(OUT.position.xyz, 1), viewPrj); + + // Pass through texture coordinates + // flip Y for Maya +#ifdef _MAYA_ + OUT.texCoord0 = float2(IN.texCoord0.x, (1.0 - IN.texCoord0.y)); + OUT.texCoord1 = float2(IN.texCoord1.x, (1.0 - IN.texCoord1.y)); + OUT.texCoord2 = float2(IN.texCoord2.x, (1.0 - IN.texCoord2.y)); +#else + OUT.texCoord0 = IN.texCoord0; + OUT.texCoord1 = IN.texCoord1; + OUT.texCoord2 = IN.texCoord2; +#endif + + // output normals in world space: + if (!SupportNonUniformScale) { + OUT.worldNormal = normalize(mul(IN.normal, (float3x3)world)); + } else { + OUT.worldNormal = normalize(mul(IN.normal, (float3x3)worldIT)); + } + + // output tangent in world space: + if (!SupportNonUniformScale) { + OUT.worldTangent.xyz = normalize(mul(IN.tangent, (float3x3)world)); + } else { + OUT.worldTangent.xyz = normalize(mul(IN.tangent, (float3x3)worldIT)); + } + + // store direction for normal map: + OUT.worldTangent.w = 1; + if (dot(cross(IN.normal.xyz, IN.tangent.xyz), IN.binormal.xyz) < 0.0) { + OUT.worldTangent.w = -1; + } + + return OUT; +} + + +//------------------------------------ +// vertex shader without tessellation +//------------------------------------ +SHADERDATA v(APPDATA IN) { + SHADERDATA OUT = vt(IN); + + // If we don't use tessellation, pass vertices in clip space: +#ifdef _SUPPORTTESSELLATION_ + OUT.position = mul(float4(OUT.position.xyz, 1), viewPrj); +#else + OUT.position = mul(float4(IN.position, 1), wvp); +#endif + + return OUT; +} + +#ifdef _SUPPORTTESSELLATION_ +//------------------------------------ +// hull shader +//------------------------------------ +// executed once per control point. +// control points can be considered the original vertices of the mesh +// outputs a control point +// run parallel with hull constant function +[domain("tri")] +[partitioning("fractional_odd")] +[outputtopology("triangle_cw")] +[patchconstantfunc("HS_Constant")] +[outputcontrolpoints(3)] +[maxtessfactor(64.0)] + +// PN-AEN without displacement fix: +// SHADERDATA HS( InputPatch IN, uint index : SV_OutputControlPointID, uint patchID : SV_PrimitiveID ) + +// PN Triangles, no crack fixes: +// SHADERDATA HS( InputPatch IN, uint index : SV_OutputControlPointID, uint patchID : SV_PrimitiveID ) + + +// PN-AEN and displacement fix +// the index buffer is made up as follows: +// the triangle vertices index (int3) // PNAEN9 and PNAEN18 +// the 3 adjacent edges vertices index (3 * int2) // PNAEN9 and PNAEN18 +// the 3 dominant edges vertices index (3 * int2) // PNAEN18 +// the dominant position vertices index (int3) // PNAEN18 +SHADERDATA HS(InputPatch IN, uint index : SV_OutputControlPointID, uint patchID : SV_PrimitiveID) { + SHADERDATA OUT = (SHADERDATA)0; + + // copy everything first: + OUT = IN[index]; + + // Compute the next output control point ID so we know which edge we're on. + const uint nextIndex = index < 2 ? index + 1 : 0; // (index + 1) % 3 + + // PN-AEN 9 and 18: + const uint neighborIndex = 3 + 2 * index; + const uint neighborNextIndex = neighborIndex + 1; + float3 myCP, neighborCP; + + // Calculate original PN control points and neighbors'. Then average. + myCP = ComputeCP(IN[index].worldPosition, IN[nextIndex].worldPosition, IN[index].worldNormal); + neighborCP = ComputeCP(IN[neighborIndex].worldPosition, IN[neighborNextIndex].worldPosition, IN[neighborIndex].worldNormal); + OUT.CP1 = (myCP + neighborCP) / 2; + + myCP = ComputeCP(IN[nextIndex].worldPosition, IN[index].worldPosition, IN[nextIndex].worldNormal); + neighborCP = ComputeCP(IN[neighborNextIndex].worldPosition, IN[neighborIndex].worldPosition, IN[neighborNextIndex].worldNormal); + OUT.CP2 = (myCP + neighborCP) / 2; + + // PN Triangles only would be: + // OUT.CP1 = ComputeCP( IN[index].worldPosition, IN[nextIndex].worldPosition, IN[index].worldNormal); + // OUT.CP2 = ComputeCP( IN[nextIndex].worldPosition, IN[index].worldPosition, IN[nextIndex].worldNormal); + + // Clipping: + OUT.clipped = ComputeClipping(OUT.worldPosition, OUT.CP1, OUT.CP2); + + // PN-AEN discontinuity code for displacement UVs: + const uint dominantEdgeIndex = 9 + 2 * index; + const uint dominantEdgeNextIndex = dominantEdgeIndex + 1; + const uint dominantVertexIndex = 15 + index; + + // Note: the order of the vertices/edges we choose here can be different per application and + // depend on how the index buffer was generated. + // These work for Maya with its PN-AEN18 primitive generator + float2 dominantEdgeUV = pickTexcoord(DisplacementTexcoord, IN[dominantEdgeIndex].texCoord0, IN[dominantEdgeIndex].texCoord1, IN[dominantEdgeIndex].texCoord2); + float2 dominantEdgeNextUV = pickTexcoord(DisplacementTexcoord, IN[dominantEdgeNextIndex].texCoord0, IN[dominantEdgeNextIndex].texCoord1, IN[dominantEdgeNextIndex].texCoord2); + float2 dominantVertexUV = pickTexcoord(DisplacementTexcoord, IN[dominantVertexIndex].texCoord0, IN[dominantVertexIndex].texCoord1, IN[dominantVertexIndex].texCoord2); + + OUT.dominantEdge = float4(dominantEdgeNextUV, dominantEdgeUV); + OUT.dominantVertex = dominantVertexUV; + + // VDM dominant normal and tangent for displacement crack fix: + OUT.dominantNormalE0 = IN[dominantEdgeNextIndex].worldNormal.xyz; + OUT.dominantNormalE1 = IN[dominantEdgeIndex].worldNormal.xyz; + OUT.dominantNormalCorner = IN[dominantVertexIndex].worldNormal.xyz; + + OUT.dominantTangentE0 = IN[dominantEdgeNextIndex].worldTangent.xyz; + OUT.dominantTangentE1 = IN[dominantEdgeIndex].worldTangent.xyz; + OUT.dominantTangentCorner = IN[dominantVertexIndex].worldTangent.xyz; + + return OUT; +} + +//------------------------------------ +// Hull shader constant function +//------------------------------------ +// executed once per patch +// outputs user defined data per patch and tessellation factor +// calculates control points for vertex and normal and passes to domain +// This hull shader passes the tessellation factors through to the HW tessellator, +// run parallel with hull function +HSCONSTANTDATA HS_Constant(const OutputPatch IN, uint patchID : SV_PrimitiveID) { + HSCONSTANTDATA OUT = (HSCONSTANTDATA)0; + + // future todo: + // triangle is on silhouette? + // triangle is facing camera? If facing backwards, reduce tessellation + // triangle lies in high frequency area of displacement map (density-based tessellation)? + + // Now setup the PNTriangle control points... + // Center control point + float3 f3E = (IN[0].CP1 + IN[0].CP2 + IN[1].CP1 + IN[1].CP2 + IN[2].CP1 + IN[2].CP2) / 6.0f; + float3 f3V = (IN[0].worldPosition + IN[1].worldPosition + IN[2].worldPosition) / 3.0f; + OUT.CPCenter = f3E + ((f3E - f3V) / 2.0f); + + // Clipping: + float4 centerViewPos = mul(float4(OUT.CPCenter, 1), viewPrj); + bool centerClipped = IsClipped(centerViewPos); + + if (IN[0].clipped && IN[1].clipped && IN[2].clipped && centerClipped) { + // If all control points are clipped, the surface cannot possibly be visible. + // Not entirely true, because displacement mapping can make them visible in the domain shader + // so we provide the user with a bias factor to avoid clipping too early + OUT.TessFactor[0] = OUT.TessFactor[1] = OUT.TessFactor[2] = 0; + } else { + // Camera based tessellation, per object. So very basic. + float3 CameraPosition = viewInv[3].xyz; + float LengthOp = length((CameraPosition - world[3].xyz)); + float DivOp = (TessellationRange / LengthOp); + float MaxOp = max(TessellationMin + DivOp, 1); + OUT.TessFactor[0] = OUT.TessFactor[1] = OUT.TessFactor[2] = MaxOp; + } + + // Inside tess factor is just the average of the edge factors + OUT.InsideTessFactor = (OUT.TessFactor[0] + OUT.TessFactor[1] + OUT.TessFactor[2]) / 3.0f; + + return OUT; +} + +//------------------------------------ +// domain shader +//------------------------------------ +// outputs the new vertices based on previous tessellation. +// also calculates new normals and uvs +// This domain shader applies contol point weighting to the barycentric coords produced by the FF tessellator +// If you wanted to do any vertex lighting, it would have to happen here. +[domain("tri")] +SHADERDATA DS(HSCONSTANTDATA HSIN, OutputPatch IN, float3 f3BarycentricCoords : SV_DomainLocation) { + SHADERDATA OUT = (SHADERDATA)0; + + // The barycentric coordinates + float fU = f3BarycentricCoords.x; + float fV = f3BarycentricCoords.y; + float fW = f3BarycentricCoords.z; + + // Precompute squares and squares * 3 + float fUU = fU * fU; + float fVV = fV * fV; + float fWW = fW * fW; + float fUU3 = fUU * 3.0f; + float fVV3 = fVV * 3.0f; + float fWW3 = fWW * 3.0f; + + // PN position: + float3 position = IN[0].worldPosition * fWW * fW + + IN[1].worldPosition * fUU * fU + + IN[2].worldPosition * fVV * fV + + IN[0].CP1 * fWW3 * fU + + IN[0].CP2 * fW * fUU3 + + IN[2].CP2 * fWW3 * fV + + IN[1].CP1 * fUU3 * fV + + IN[2].CP1 * fW * fVV3 + + IN[1].CP2 * fU * fVV3 + + HSIN.CPCenter * 6.0f * fW * fU * fV; + + // Flat position: + float3 flatPosition = IN[0].worldPosition * fW + IN[1].worldPosition * fU + IN[2].worldPosition * fV; + + // allow user to blend between PN tessellation and flat tessellation: + position = lerp(position, flatPosition, FlatTessellation); + + // Interpolate normal + float3 normal = IN[0].worldNormal * fW + IN[1].worldNormal * fU + IN[2].worldNormal * fV; + + // Normalize the interpolated normal + OUT.worldNormal = normalize(normal); + + // Compute tangent: + float3 tangent = IN[0].worldTangent.xyz * fW + IN[1].worldTangent.xyz * fU + IN[2].worldTangent.xyz * fV; + OUT.worldTangent.xyz = normalize(tangent.xyz); + + // Pass through the direction of the binormal as calculated in the vertex shader + OUT.worldTangent.w = IN[0].worldTangent.w; + + // Linear interpolate the texture coords + OUT.texCoord0 = IN[0].texCoord0 * fW + IN[1].texCoord0 * fU + IN[2].texCoord0 * fV; + OUT.texCoord1 = IN[0].texCoord1 * fW + IN[1].texCoord1 * fU + IN[2].texCoord1 * fV; + OUT.texCoord2 = IN[0].texCoord2 * fW + IN[1].texCoord2 * fU + IN[2].texCoord2 * fV; + + // apply displacement map (only when not rendering the Maya preview swatch): + if (UseDisplacementMap && !IsSwatchRender) { + // Fix Displacement Seams. + // we assume here that the displacement UVs is UVset 0. + // if this UVset index is changed, it should als be changed in the hull shader + // PN-AEN 18 with displacement UV seam fix + float2 displaceUV = pickTexcoord(DisplacementTexcoord, OUT.texCoord0, OUT.texCoord1, OUT.texCoord2); + float3 displacementUVW = PickDominant(float3(displaceUV, 0), fU, fV, fW, + float3(IN[0].dominantEdge.xy, 0), float3(IN[0].dominantEdge.zw, 0), + float3(IN[1].dominantEdge.xy, 0), float3(IN[1].dominantEdge.zw, 0), + float3(IN[2].dominantEdge.xy, 0), float3(IN[2].dominantEdge.zw, 0), + float3(IN[0].dominantVertex.xy, 0), + float3(IN[1].dominantVertex.xy, 0), + float3(IN[2].dominantVertex.xy, 0)); + + // We can still get cracks here because the world tangent and normal may be different for vertices on each side of the UV seam, + // because we do the tangent to world conversion, we get the same diplacement amount, but it results in different movement once converted to world space. + // And even a tiny difference between normal or tangent will cause large cracks. + float3 displacementNormal = PickDominant(OUT.worldNormal, + fU, fV, fW, + IN[0].dominantNormalE0, IN[0].dominantNormalE1, + IN[1].dominantNormalE0, IN[1].dominantNormalE1, + IN[2].dominantNormalE0, IN[2].dominantNormalE1, + IN[0].dominantNormalCorner, + IN[1].dominantNormalCorner, + IN[2].dominantNormalCorner); + + displacementNormal = normalize(displacementNormal); + + if (DisplacementModel == 1) { // Tangent Vector Displacement + float3 displacementTangent = PickDominant(OUT.worldTangent.xyz, fU, fV, fW, + IN[0].dominantTangentE0, IN[0].dominantTangentE1, + IN[1].dominantTangentE0, IN[1].dominantTangentE1, + IN[2].dominantTangentE0, IN[2].dominantTangentE1, + IN[0].dominantTangentCorner, + IN[1].dominantTangentCorner, + IN[2].dominantTangentCorner); + + displacementTangent = normalize(displacementTangent); + + float3 vecDisp = DisplacementTexture.SampleLevel(SamplerAnisoWrap, displacementUVW.xy, 0).xyz; + vecDisp -= DisplacementOffset; + + float3 Bn = cross(displacementNormal, displacementTangent); + float3x3 toWorld = float3x3(displacementTangent, Bn.xyz, displacementNormal); + + float3 VDMcoordSys = vecDisp.xzy; // Mudbox + if (VectorDisplacementCoordSys == 1) { + VDMcoordSys = vecDisp.xyz; // Maya or ZBrush + } + + float3 vecDispW = mul(VDMcoordSys, toWorld) * DisplacementHeight; + position.xyz += vecDispW; + } else { + // offset (-0.5) so that we can have negative displacement also + float offset = DisplacementTexture.SampleLevel(SamplerAnisoWrap, displacementUVW.xy, 0).x - DisplacementOffset; + position.xyz += displacementNormal * offset * DisplacementHeight; + } + } + + // Update World Position value for inside pixel shader: + OUT.worldPosition = position.xyz; + + // Transform model position with view-projection matrix + //OUT.position = float4(position.xyz, 1); // with geo + OUT.position = mul(float4(position.xyz, 1), viewPrj); // without geo + + return OUT; +} + +//------------------------------------ +// Geometry Shader +//------------------------------------ +// This is a sample Geo shader. Disabled in this shader, but left here for your reference. +// If you wish to enable it, search for 'with geo' in this shader for code to change. +[maxvertexcount(3)] // Declaration for the maximum number of vertices to create +void GS(triangle SHADERDATA IN[3], inout TriangleStream TriStream) { + SHADERDATA OUT; + + // quick test to see if geo also works: + for (int i = 0; i<3; ++i) { + OUT = IN[i]; + OUT.position = mul(mul(float4(OUT.position.xyz, 1), view), prj); + TriStream.Append(OUT); + } + TriStream.RestartStrip(); // end triangle +} +#endif + +void sampleMasks() { + +} + +//------------------------------------ +// pixel shader +//------------------------------------ +float4 f(SHADERDATA IN, bool FrontFace : SV_IsFrontFace) : SV_Target { +#ifdef _3DSMAX_ + FrontFace = !FrontFace; +#endif + // clip are early as possible + float2 opacityMaskUV = pickTexcoord(OpacityMaskTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + OpacityMaskClip(opacityMaskUV); + + float gammaCorrection = lerp(1.0, 2.2, LinearSpaceLighting); + + float3 N = normalize(IN.worldNormal.xyz); + if (flipBackfaceNormals) { + N = lerp(-N, N, FrontFace); + } + float3 Nw = N; + + // Tangent and BiNormal: + float3 T = normalize(IN.worldTangent.xyz); + float3 Bn = cross(N, T); + Bn *= IN.worldTangent.w; + + float4 diffuse = float4(1, 1, 1, 1); + if (UseDiffuseTexture) { + float2 diffuseUV = pickTexcoord(DiffuseTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float4 diffuseTextureSample = DiffuseTexture.Sample(SamplerAnisoWrap, diffuseUV); + + if (UseDiffuseTextureAlpha) { + diffuse.a = diffuseTextureSample.a; + } + + diffuse.rgb *= pow(diffuseTextureSample.rgb, gammaCorrection); + } + + float3 microNormal = float3(0, 0, 1); + if (UseNormalTexture) { + float3x3 toWorld = float3x3(T, Bn, N); + + float2 normalUV = pickTexcoord(NormalTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float3 NormalMap = NormalTexture.Sample(SamplerAnisoWrap, normalUV).xyz * 2.0 - 1.0; + float3 backupNormal = NormalMap; + + if (NormalCoordsysX > 0) + NormalMap.x = -NormalMap.x; + if (NormalCoordsysY > 0) + NormalMap.y = -NormalMap.y; + + NormalMap.xy *= NormalHeight; + + if (UseMicroNormalTexture) { + float2 normalUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + microNormal = MicroNormalTexture.Sample(SamplerAnisoWrap, normalUV * MicroScale).xyz * 2.0 - 1.0; + + microNormal.xy *= MicroNormalHeight; + NormalMap.xy += microNormal.xy; + } + + if (UseBlendTexture) { + float2 blendUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + + float3 animNormalSample_00 = animNormalMap_00.Sample(SamplerAnisoWrap, blendUV).xyz * 2.0 - 1.0; + if (NormalCoordsysY > 0) { + animNormalSample_00.y = -animNormalSample_00.y; + } + if (NormalCoordsysX > 0) { + animNormalSample_00.x = -animNormalSample_00.x; + } + float3 animNormalDelta_00 = animNormalSample_00 - NormalMap; + float3 animNormalSample_01 = animNormalMap_01.Sample(SamplerAnisoWrap, blendUV).xyz * 2.0 - 1.0; + if (NormalCoordsysY > 0) { + animNormalSample_01.y = -animNormalSample_01.y; + } + if (NormalCoordsysX > 0) { + animNormalSample_01.x = -animNormalSample_01.x; + } + float3 animNormalDelta_01 = animNormalSample_01 - NormalMap; + float3 animNormalSample_02 = animNormalMap_02.Sample(SamplerAnisoWrap, blendUV).xyz * 2.0 - 1.0; + if (NormalCoordsysY > 0) { + animNormalSample_02.y = -animNormalSample_02.y; + } + if (NormalCoordsysX > 0) { + animNormalSample_02.x = -animNormalSample_02.x; + } + float3 animNormalDelta_02 = animNormalSample_02 - NormalMap; + + float3 animColorDelta_00 = (pow(animColorMap_00.Sample(SamplerAnisoWrap, blendUV).xyz, gammaCorrection)) - diffuse; + float3 animColorDelta_01 = (pow(animColorMap_01.Sample(SamplerAnisoWrap, blendUV).xyz, gammaCorrection)) - diffuse; + float3 animColorDelta_02 = (pow(animColorMap_02.Sample(SamplerAnisoWrap, blendUV).xyz, gammaCorrection)) - diffuse; + + float maskChannelVal_00 = maskChannel_00.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_01 = maskChannel_01.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_02 = maskChannel_02.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_03 = maskChannel_03.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_04 = maskChannel_04.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_05 = maskChannel_05.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_06 = maskChannel_06.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_07 = maskChannel_07.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_08 = maskChannel_08.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_09 = maskChannel_09.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_10 = maskChannel_10.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_11 = maskChannel_11.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_12 = maskChannel_12.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_13 = maskChannel_13.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_14 = maskChannel_14.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_15 = maskChannel_15.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_16 = maskChannel_16.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_17 = maskChannel_17.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_18 = maskChannel_18.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_19 = maskChannel_19.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_20 = maskChannel_20.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_21 = maskChannel_21.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_22 = maskChannel_22.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_23 = maskChannel_23.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_24 = maskChannel_24.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_25 = maskChannel_25.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_26 = maskChannel_26.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_27 = maskChannel_27.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_28 = maskChannel_28.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_29 = maskChannel_29.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_30 = maskChannel_30.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_31 = maskChannel_31.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_32 = maskChannel_32.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_33 = maskChannel_33.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_34 = maskChannel_34.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_35 = maskChannel_35.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_36 = maskChannel_36.Sample(SamplerAnisoWrap, blendUV); + + NormalMap.xy += animNormalDelta_00 * maskWeight_47 * maskChannelVal_36 + + animNormalDelta_00 * maskWeight_15 * maskChannelVal_05 + + animNormalDelta_00 * maskWeight_13 * maskChannelVal_04 + + animNormalDelta_00 * maskWeight_46 * maskChannelVal_35 + + animNormalDelta_00 * maskWeight_73 * maskChannelVal_06 + + animNormalDelta_00 * maskWeight_11 * maskChannelVal_03 + + animNormalDelta_00 * maskWeight_65 * maskChannelVal_11 + + animNormalDelta_00 * maskWeight_75 * maskChannelVal_07 + + animNormalDelta_00 * maskWeight_67 * maskChannelVal_12 + + animNormalDelta_00 * maskWeight_09 * maskChannelVal_02 + + animNormalDelta_00 * maskWeight_49 * maskChannelVal_34 + + animNormalDelta_00 * maskWeight_71 * maskChannelVal_10 + + animNormalDelta_00 * maskWeight_48 * maskChannelVal_33 + + animNormalDelta_00 * maskWeight_23 * maskChannelVal_14 + + animNormalDelta_00 * maskWeight_69 * maskChannelVal_09 + + animNormalDelta_00 * maskWeight_18 * maskChannelVal_00 + + animNormalDelta_00 * maskWeight_22 * maskChannelVal_01 + + animNormalDelta_00 * maskWeight_77 * maskChannelVal_08 + + animNormalDelta_00 * maskWeight_19 * maskChannelVal_13 + + animNormalDelta_01 * maskWeight_07 * maskChannelVal_18 + + animNormalDelta_01 * maskWeight_03 * maskChannelVal_16 + + animNormalDelta_01 * maskWeight_81 * maskChannelVal_22 + + animNormalDelta_01 * maskWeight_79 * maskChannelVal_21 + + animNormalDelta_01 * maskWeight_01 * maskChannelVal_15 + + animNormalDelta_01 * maskWeight_05 * maskChannelVal_17 + + animNormalDelta_01 * maskWeight_63 * maskChannelVal_20 + + animNormalDelta_01 * maskWeight_37 * maskChannelVal_23 + + animNormalDelta_01 * maskWeight_61 * maskChannelVal_19 + + animNormalDelta_01 * maskWeight_39 * maskChannelVal_24 + + animNormalDelta_02 * maskWeight_59 * maskChannelVal_34 + + animNormalDelta_02 * maskWeight_35 * maskChannelVal_30 + + animNormalDelta_02 * maskWeight_54 * maskChannelVal_35 + + animNormalDelta_02 * maskWeight_58 * maskChannelVal_36 + + animNormalDelta_02 * maskWeight_29 * maskChannelVal_29 + + animNormalDelta_02 * maskWeight_55 * maskChannelVal_33 + + animNormalDelta_02 * maskWeight_28 * maskChannelVal_27 + + animNormalDelta_02 * maskWeight_33 * maskChannelVal_26 + + animNormalDelta_02 * maskWeight_27 * maskChannelVal_25 + + animNormalDelta_02 * maskWeight_34 * maskChannelVal_28 + + animNormalDelta_02 * maskWeight_41 * maskChannelVal_31 + + animNormalDelta_02 * maskWeight_51 * maskChannelVal_32; + + diffuse.rgb += animColorDelta_00 * maskWeight_20 * maskChannelVal_01 + + animColorDelta_00 * maskWeight_70 * maskChannelVal_10 + + animColorDelta_00 * maskWeight_43 * maskChannelVal_36 + + animColorDelta_00 * maskWeight_66 * maskChannelVal_12 + + animColorDelta_00 * maskWeight_45 * maskChannelVal_34 + + animColorDelta_00 * maskWeight_12 * maskChannelVal_04 + + animColorDelta_00 * maskWeight_14 * maskChannelVal_05 + + animColorDelta_00 * maskWeight_44 * maskChannelVal_33 + + animColorDelta_00 * maskWeight_42 * maskChannelVal_35 + + animColorDelta_00 * maskWeight_16 * maskChannelVal_00 + + animColorDelta_00 * maskWeight_74 * maskChannelVal_07 + + animColorDelta_00 * maskWeight_64 * maskChannelVal_11 + + animColorDelta_00 * maskWeight_68 * maskChannelVal_09 + + animColorDelta_00 * maskWeight_10 * maskChannelVal_03 + + animColorDelta_00 * maskWeight_08 * maskChannelVal_02 + + animColorDelta_00 * maskWeight_72 * maskChannelVal_06 + + animColorDelta_00 * maskWeight_21 * maskChannelVal_14 + + animColorDelta_00 * maskWeight_76 * maskChannelVal_08 + + animColorDelta_00 * maskWeight_17 * maskChannelVal_13 + + animColorDelta_01 * maskWeight_78 * maskChannelVal_21 + + animColorDelta_01 * maskWeight_60 * maskChannelVal_19 + + animColorDelta_01 * maskWeight_80 * maskChannelVal_22 + + animColorDelta_01 * maskWeight_06 * maskChannelVal_18 + + animColorDelta_01 * maskWeight_04 * maskChannelVal_17 + + animColorDelta_01 * maskWeight_62 * maskChannelVal_20 + + animColorDelta_01 * maskWeight_38 * maskChannelVal_24 + + animColorDelta_01 * maskWeight_36 * maskChannelVal_23 + + animColorDelta_01 * maskWeight_02 * maskChannelVal_16 + + animColorDelta_01 * maskWeight_00 * maskChannelVal_15 + + animColorDelta_02 * maskWeight_30 * maskChannelVal_26 + + animColorDelta_02 * maskWeight_52 * maskChannelVal_35 + + animColorDelta_02 * maskWeight_32 * maskChannelVal_30 + + animColorDelta_02 * maskWeight_26 * maskChannelVal_29 + + animColorDelta_02 * maskWeight_24 * maskChannelVal_25 + + animColorDelta_02 * maskWeight_56 * maskChannelVal_36 + + animColorDelta_02 * maskWeight_25 * maskChannelVal_27 + + animColorDelta_02 * maskWeight_57 * maskChannelVal_34 + + animColorDelta_02 * maskWeight_53 * maskChannelVal_33 + + animColorDelta_02 * maskWeight_31 * maskChannelVal_28 + + animColorDelta_02 * maskWeight_50 * maskChannelVal_32 + + animColorDelta_02 * maskWeight_40 * maskChannelVal_31; + + } + NormalMap = mul(NormalMap.xyz, toWorld); + N = normalize(NormalMap); + } else { + if (UseMicroNormalTexture) { + float3x3 toWorld = float3x3(T, Bn, N); + + float2 normalUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + microNormal = MicroNormalTexture.Sample(SamplerAnisoWrap, normalUV * MicroScale).xyz * 2.0 - 1.0; + + microNormal.xy *= MicroNormalHeight; + microNormal = mul(microNormal.xyz, toWorld); + } + } + + diffuse.rgb *= DiffuseColor; + + float3 blurredNormal = lerp(N, Nw, NormalBlurring); + + float3 V = normalize(viewInv[3].xyz - IN.worldPosition.xyz); + + float4 specular = float4(0.028, 0.028, 0.028, 1); + specular.rgb *= SpecularColor; + + if (UseSpecularTexture) { + float2 opacityUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float4 SpecularTextureSample = SpecularTexture.Sample(SamplerAnisoWrap, opacityUV); + + specular.rgb *= pow(SpecularTextureSample.rgb, gammaCorrection); + + if (UseSpecularTextureAlpha) { + specular.a = SpecularTextureSample.a; + } + } + + float cavity = 1; + if (UseCavityTexture) { + float2 cavityUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float CavityTextureSample = CavityTexture.Sample(SamplerAnisoWrap, cavityUV); + + cavity = lerp(1, pow(CavityTextureSample, gammaCorrection), CavityAmount); + } + + float microCavity = 1; + if (UseMicroCavityTexture) { + float2 cavityUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float MicroCavityTextureSample = MicroCavityTexture.Sample(SamplerAnisoWrap, cavityUV * MicroScale); + + microCavity = lerp(1, pow(MicroCavityTextureSample, gammaCorrection), MicroCavityAmount); + } + + specular.rgb *= cavity * microCavity; // We apply cavity on the specular before it is sent to the fresnel + + float roughness = Roughness; + if (UseSpecularTextureAlpha) { + roughness *= specular.a; + } + + float scatteringRadius = 1; + if (UseScatteringRadiusTexture) { + float2 scatteringUV = pickTexcoord(DiffuseTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float4 scatteringRadiusTextureSample = ScatteringRadiusTexture.Sample(SamplerAnisoWrap, scatteringUV); + + scatteringRadius *= pow(scatteringRadiusTextureSample, gammaCorrection); + } + + // Opacity: + float opacity = saturate(diffuse.a * Opacity); + + // Occlusion: + float3 ambientOcclusion = float3(1, 1, 1); + if (UseAmbientOcclusionTexture) { + float2 aomapUV = pickTexcoord(OcclusionTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float3 aomapTextureSample = OcclusionTexture.Sample(SamplerAnisoWrap, aomapUV).rgb; + ambientOcclusion *= lerp(1, pow(aomapTextureSample.rgb, gammaCorrection), OcclusionAmount); + } + + float3 thickness = float3(1, 1, 1); + if (UseThicknessTexture) { + float2 thicknessUV = pickTexcoord(ThicknessTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + thickness = pow(BackScatteringThicknessTexture.Sample(SamplerAnisoWrap, thicknessUV), gammaCorrection).xyz; + } + + float3 skinOcclusion = coloredOcclusion(diffuse, ambientOcclusion); // Colored occlusion for skin + + float softenMask = 1.0f; + + float2 screenCoord = IN.screenCoord.xy / IN.screenCoord.w; + //float2 currentScreenSize = screenSize; // TO DO FIND A WAY TO GET SCREEN SIZE, MAYA BUG ? + float2 currentScreenSize = float2(1024, 512); + + // -------- + // LIGHTS: + // -------- + // future todo: Maya could pass light info in array so we can loop any number of lights. + + // light 0: + lightOut light0 = CalculateLight(light0Enable, light0Type, light0AttenScale, light0Pos, IN.worldPosition.xyz, + light0Color, light0Intensity, light0Dir, light0ConeAngle, light0FallOff, light0Matrix, + light0ShadowMap, light0ShadowOn, blurredNormal, N, diffuse, V, roughness, specular, + thickness, softenMask, gammaCorrection, opacity, ambientOcclusion, skinOcclusion, screenCoord, currentScreenSize, scatteringRadius); + + // light 1: + lightOut light1 = CalculateLight(light1Enable, light1Type, light1AttenScale, light1Pos, IN.worldPosition.xyz, + light1Color, light1Intensity, light1Dir, light1ConeAngle, light1FallOff, light1Matrix, + light1ShadowMap, light1ShadowOn, blurredNormal, N, diffuse, V, roughness, specular, + thickness, softenMask, gammaCorrection, opacity, ambientOcclusion, skinOcclusion, screenCoord, currentScreenSize, scatteringRadius); + + // light 2: + lightOut light2 = CalculateLight(light2Enable, light2Type, light2AttenScale, light2Pos, IN.worldPosition.xyz, + light2Color, light2Intensity, light2Dir, light2ConeAngle, light2FallOff, light2Matrix, + light2ShadowMap, light2ShadowOn, blurredNormal, N, diffuse, V, roughness, specular, + thickness, softenMask, gammaCorrection, opacity, ambientOcclusion, skinOcclusion, screenCoord, currentScreenSize, scatteringRadius); + + float3 lightTotal = light0.Color + light1.Color + light2.Color; + + + // ---------------------- + // IMAGE BASED LIGHTING + // ---------------------- + + // Specular IBL + float3 specularIBL = float3(0, 0, 0); + bool reflectMapUsed = UseSpecCubeIBL; + if (reflectMapUsed) { + int lod = 7; // Hard coded mip map level + + float3 reflectionVector = reflect(-V, N); + + reflectionVector = RotateVectorYaw(reflectionVector, SkyRotation); + reflectionVector = normalize(reflectionVector); + float NdotV = saturate(dot(N, V)); + float3 F = F_LagardeSchlick(specular, 1 - roughness, NdotV); + + specularIBL += SpecularCubeIBL.SampleLevel(CubeMapSampler, reflectionVector, lod * roughness).rgb * F; + } + + // Diffuse IBL + float3 diffuseIBL = float3(0, 0, 0); + bool useDiffuseIBL = UseDiffuseIBLMap; + if (useDiffuseIBL) { + // We use the world normal to sample the lighting texture + float3 diffuseIBLVec_High = N; + float3 diffuseIBLVec_Low = blurredNormal; + + diffuseIBLVec_High = RotateVectorYaw(diffuseIBLVec_High, SkyRotation); + diffuseIBLVec_High = normalize(diffuseIBLVec_High); + + diffuseIBLVec_Low = RotateVectorYaw(diffuseIBLVec_Low, SkyRotation); + diffuseIBLVec_Low = normalize(diffuseIBLVec_Low); + + float3 diffuseIBL_High = DiffuseCubeIBL.SampleLevel(CubeMapSampler, diffuseIBLVec_High, 0).rgb; + float3 diffuseIBL_Low = DiffuseCubeIBL.SampleLevel(CubeMapSampler, diffuseIBLVec_Low, 0).rgb; + + diffuseIBL = diffuseSkinIBL(float3(skinCoeffX, skinCoeffY, skinCoeffZ), diffuseIBL_High, diffuseIBL_Low); + } + + // ---------------------- + // FINAL COLOR AND ALPHA: + // ---------------------- + + float3 result = float3(0, 0, 0); + + result += diffuse * diffuseIBL * DiffuseIBLIntensity * skinOcclusion; + + result += specularIBL * SpecularIBLIntensity * specularOcclusion(N, V, ambientOcclusion); + + result += lightTotal; + + //result = N; + + // do gamma correction in shader: + if (!MayaFullScreenGamma) + result = pow(result, 1 / gammaCorrection); + + // final alpha: + float transparency = opacity; + transparency = saturate(transparency); // keep 0-1 range + + return float4(result, transparency); +} + + +#ifdef _MAYA_ +void Peel(SHADERDATA IN) { + float currZ = abs(mul(float4(IN.worldPosition, 1.0f), view).z); + + float4 Pndc = mul(float4(IN.worldPosition, 1.0f), viewPrj); + float2 UV = Pndc.xy / Pndc.w * float2(0.5f, -0.5f) + 0.5f; + float prevZ = transpDepthTexture.Sample(SamplerShadowDepth, UV).r; + float opaqZ = opaqueDepthTexture.Sample(SamplerShadowDepth, UV).r; + float bias = 0.00002f; + + if (currZ < prevZ * (1.0f + bias) || currZ > opaqZ * (1.0f - bias)) { + discard; + } +} + +float4 LinearDepth(SHADERDATA IN) { + return abs(mul(float4(IN.worldPosition, 1.0f), view).z); +} + +float4 DepthComplexity(float opacity) { + return opacity > 0.001f ? 1.0f : 0.0f; +} + +struct MultiOut2 { + float4 target0 : SV_Target0; + float4 target1 : SV_Target1; +}; + +MultiOut2 fTransparentPeel(SHADERDATA IN, bool FrontFace : SV_IsFrontFace) { + Peel(IN); + + MultiOut2 OUT; + OUT.target0 = f(IN, FrontFace); + OUT.target1 = LinearDepth(IN); + return OUT; +} + +MultiOut2 fTransparentPeelAndAvg(SHADERDATA IN, bool FrontFace : SV_IsFrontFace) { + Peel(IN); + + MultiOut2 OUT; + OUT.target0 = f(IN, FrontFace); + OUT.target1 = DepthComplexity(OUT.target0.w); + return OUT; +} + +MultiOut2 fTransparentWeightedAvg(SHADERDATA IN, bool FrontFace : SV_IsFrontFace) { + MultiOut2 OUT; + OUT.target0 = f(IN, FrontFace); + OUT.target1 = DepthComplexity(OUT.target0.w); + return OUT; +} + +//------------------------------------ +// wireframe pixel shader +//------------------------------------ +float4 fwire(SHADERDATA IN) : SV_Target { + return float4(0, 0, 1, 1); +} + + +//------------------------------------ +// pixel shader for shadow map generation +//------------------------------------ +//float4 ShadowMapPS( float3 Pw, float4x4 shadowViewProj ) +float4 ShadowMapPS(SHADERDATA IN) : SV_Target { + // clip as early as possible + float2 opacityMaskUV = pickTexcoord(OpacityMaskTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + OpacityMaskClip(opacityMaskUV); + + float4 Pndc = mul(float4(IN.worldPosition, 1.0f), viewPrj); + + // divide Z and W component from clip space vertex position to get final depth per pixel + float retZ = Pndc.z / Pndc.w; + + retZ += fwidth(retZ); + return retZ.xxxx; +} +#endif + +//----------------------------------- +// Objects without tessellation +//------------------------------------ +technique11 TessellationOFF < + bool overridesDrawState = false; // we do not supply our own render state settings + int isTransparent = 3; + // objects with clipped pixels need to be flagged as isTransparent to avoid the occluding underlying geometry since Maya renders the object with flat shading when computing depth + string transparencyTest = "Opacity < 1.0 || (UseDiffuseTexture && UseDiffuseTextureAlpha) || UseOpacityMaskTexture"; + // 'VariableNameAsAttributeName = false' can be used to tell Maya's DX11ShaderNode to use the UIName annotation string for the Maya attribute name instead of the shader variable name. + // When changing this option, the attribute names generated for the shader inside Maya will change and this can have the side effect that older scenes have their shader attributes reset to default. + // bool VariableNameAsAttributeName = false; + +#ifdef _MAYA_ + // Tells Maya that the effect supports advanced transparency algorithm, + // otherwise Maya would render the associated objects simply by alpha + // blending on top of other objects supporting advanced transparency + // when the viewport transparency algorithm is set to depth-peeling or + // weighted-average. + bool supportsAdvancedTransparency = true; +#endif +> +{ + pass p0 < string drawContext = "colorPass"; > { // tell maya during what draw context this shader should be active, in this case 'Color' + // even though overrideDrawState is false, we still set the pre-multiplied alpha state here in + // case Maya is using 'Depth Peeling' transparency algorithm + // This unfortunately won't solve sorting issues, but at least our object can draw transparent. + // If we don't set this, the object will always be opaque. + // In the future, hopefully ShaderOverride nodes can participate properly in Maya's Depth Peeling setup +#ifdef _MAYA_ + SetBlendState(PMAlphaBlending, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF); +#endif + SetVertexShader(CompileShader(vs_5_0, v())); + SetHullShader(NULL); + SetDomainShader(NULL); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, f())); + } + +#ifdef _MAYA_ + pass pTransparentPeel < string drawContext = "transparentPeel"; > { // Depth-peeling pass for depth-peeling transparency algorithm. + SetVertexShader(CompileShader(vs_5_0, v())); + SetHullShader(NULL); + SetDomainShader(NULL); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentPeel())); + } + + pass pTransparentPeelAndAvg < string drawContext = "transparentPeelAndAvg"; > { // Weighted-average pass for depth-peeling transparency algorithm. + SetVertexShader(CompileShader(vs_5_0, v())); + SetHullShader(NULL); + SetDomainShader(NULL); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentPeelAndAvg())); + } + + pass pTransparentWeightedAvg < string drawContext = "transparentWeightedAvg"; > { // Weighted-average algorithm. No peeling. + SetVertexShader(CompileShader(vs_5_0, v())); + SetHullShader(NULL); + SetDomainShader(NULL); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentWeightedAvg())); + } + + pass pShadow < string drawContext = "shadowPass"; > { + SetVertexShader(CompileShader(vs_5_0, v())); + SetHullShader(NULL); + SetDomainShader(NULL); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, ShadowMapPS())); + } +#endif +} + +#ifdef _SUPPORTTESSELLATION_ +//----------------------------------- +// Objects with tessellation +//------------------------------------ +// Vertex Index Buffer options: +// index_buffer_type: None; // no divergent normals and no displacement crack fix +// index_buffer_type: PNAEN9; // divergent normals crack fix; no displacement UV seam crack fix +// index_buffer_type: PNAEN18, // crack fix for divergent normals and UV seam displacement +technique11 TessellationON < + string index_buffer_type = "PNAEN18"; // tell Maya what type of index buffer we want. Must be unique name per generator + bool overridesDrawState = false; + int isTransparent = 3; + string transparencyTest = "Opacity < 1.0 || (UseDiffuseTexture && UseDiffuseTextureAlpha) || UseOpacityMaskTexture"; + bool supportsAdvancedTransparency = true; > { + pass p0 < string drawContext = "colorPass"; > { + SetBlendState(PMAlphaBlending, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF); + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); // without geo + //SetGeometryShader( CompileShader(gs_5_0, GS()) ); // with geo + SetPixelShader(CompileShader(ps_5_0, f())); + } + + pass pTransparentPeel < string drawContext = "transparentPeel";> { // Depth-peeling pass for depth-peeling transparency algorithm. + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentPeel())); + } + + pass pTransparentPeelAndAvg < string drawContext = "transparentPeelAndAvg"; > { // Weighted-average pass for depth-peeling transparency algorithm. + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentPeelAndAvg())); + } + + pass pTransparentWeightedAvg < string drawContext = "transparentWeightedAvg"; > { // Weighted-average algorithm. No peeling. + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentWeightedAvg())); + } + + pass pShadow < string drawContext = "shadowPass"; > { + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, ShadowMapPS())); + } +} + +//----------------------------------- +// Wireframe +//------------------------------------ +technique11 WireFrame < + string index_buffer_type = "PNAEN18"; + bool overridesDrawState = false; // since we only change the fillMode, it can remain on false. If we changed the blend state, it would have to be true + int isTransparent = 0; > { + pass p0 < string drawContext = "colorPass"; > { + SetRasterizerState(WireframeCullFront); + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); // without geo + //SetGeometryShader( CompileShader(gs_5_0, GS()) ); // with geo + SetPixelShader(CompileShader(ps_5_0, fwire())); + } +} +#endif diff --git a/data/shaders/dx11_shd_eyeLeft.fx b/data/shaders/dx11_shd_eyeLeft.fx new file mode 100644 index 0000000..6b74541 --- /dev/null +++ b/data/shaders/dx11_shd_eyeLeft.fx @@ -0,0 +1,2872 @@ +// Maya Skin shader made by Charles Greivelding 2014 + +//------------------------------------ +// Notes +//------------------------------------ +// Shader uses 'pre-multiplied alpha' as its render state and this Uber Shader is build to work in unison with that. +// Alternatively, in Maya, the dx11Shader node allows you to set your own render states by supplying the 'overridesDrawState' annotation in the technique +// You may find it harder to get proper transparency sorting if you choose to do so. + +// The technique annotation 'isTransparent' is used to tell Maya how treat the technique with respect to transparency. +// - If set to 0 the technique is always considered opaque +// - If set to 1 the technique is always considered transparent +// - If set to 2 the plugin will check if the parameter marked with the OPACITY semantic is less than 1.0 +// - If set to 3 the plugin will use the transparencyTest annotation to create a MEL procedure to perform the desired test. +// Maya will then render the object twice. Front faces follow by back faces. + +// For some objects you may need to switch the Transparency Algorithm to 'Depth Peeling' to avoid transparency issues. +// Models that require this usually have internal faces. + +//------------------------------------ +// Defines +//------------------------------------ +// how many mip map levels should Maya generate or load per texture. +// 0 means all possible levels +// some textures may override this value, but most textures will follow whatever we have defined here +// If you wish to optimize performance (at the cost of reduced quality), you can set NumberOfMipMaps below to 1 + +#define NumberOfMipMaps 0 +#define PI 3.1415926 +#define _3DSMAX_SPIN_MAX 99999 + +#ifndef _MAYA_ +#define _3DSMAX_ // at time of writing this shader, Nitrous driver did not have the _3DSMAX_ define set +#define _ZUP_ // Maya is Y up, 3dsMax is Z up +#endif + +#ifdef _MAYA_ +#define _SUPPORTTESSELLATION_ // at time of writing this shader, 3dsMax did not support tessellation +#endif + +//------------------------------------ +// State +//------------------------------------ +#ifdef _MAYA_ +RasterizerState WireframeCullFront { + CullMode = Front; + FillMode = WIREFRAME; +}; + +BlendState PMAlphaBlending { + AlphaToCoverageEnable = FALSE; + BlendEnable[0] = TRUE; + SrcBlend = ONE; + DestBlend = INV_SRC_ALPHA; + BlendOp = ADD; + SrcBlendAlpha = ONE; // Required for hardware frame render alpha channel + DestBlendAlpha = INV_SRC_ALPHA; + BlendOpAlpha = ADD; + RenderTargetWriteMask[0] = 0x0F; +}; +#endif + +//------------------------------------ +// Map Channels +//------------------------------------ +#ifdef _3DSMAX_ +int texcoord0 : Texcoord < + int Texcoord = 0; + int MapChannel = 1; + string UIWidget = "None"; +>; + +int texcoord1 : Texcoord < + int Texcoord = 1; + int MapChannel = 2; + string UIWidget = "None"; +>; + +int texcoord2 : Texcoord < + int Texcoord = 2; + int MapChannel = 3; + string UIWidget = "None"; +>; +#endif + +//------------------------------------ +// Samplers +//------------------------------------ +SamplerState CubeMapSampler { + Filter = ANISOTROPIC; + AddressU = Clamp; + AddressV = Clamp; + AddressW = Clamp; +}; + +SamplerState SamplerAnisoWrap { + Filter = ANISOTROPIC; + AddressU = Wrap; + AddressV = Wrap; +}; + +SamplerState SamplerAnisoClamp { + Filter = ANISOTROPIC; + AddressU = Clamp; + AddressV = Clamp; +}; + +SamplerState SamplerShadowDepth { + Filter = MIN_MAG_MIP_POINT; + AddressU = Border; + AddressV = Border; + BorderColor = float4(1.0f, 1.0f, 1.0f, 1.0f); +}; + +//------------------------------------ +// Textures +//------------------------------------ + +Texture2D LutTexture < + string UIGroup = "SubSurfaceScattering"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "SSS LUT Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 203; + int UVEditorOrder = 2; +>; + +Texture2D DitherTexture < + string UIGroup = "SubSurfaceScattering"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "SSS Dither Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 203; + int UVEditorOrder = 2; +>; + +// --------------------------------------------- +// Blend GROUP +// --------------------------------------------- + +bool UseBlendTexture < + string UIGroup = "Wrinkle mixing"; + string UIName = "Enable Wrinkle Mixing"; + int UIOrder = 919; +> = false; + + + + + + +Texture2D OcclusionTexture < + string UIGroup = "Occlusion"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Ambient Occlusion Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 401; + int UVEditorOrder = 2; +>; + +Texture2D ScatteringRadiusTexture < + string UIGroup = "SubSurfaceScattering"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "SSS Radius Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 209; + int UVEditorOrder = 2; +>; + +Texture2D CavityTexture < + string UIGroup = "Cavity"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Cavity Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 501; + int UVEditorOrder = 4; +>; + +Texture2D DiffuseTexture < + string UIGroup = "Diffuse"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Diffuse Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 201; + int UVEditorOrder = 1; +>; + +Texture2D SpecularTexture < + string UIGroup = "Specular"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Specular Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 302; + int UVEditorOrder = 4; +>; + +Texture2D NormalTexture < + string UIGroup = "Normal"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Normal Map"; + string ResourceType = "2D"; + int mipmaplevels = 0; // If mip maps exist in texture, Maya will load them. So user can pre-calculate and re-normalize mip maps for normal maps in .dds + int UIOrder = 601; + int UVEditorOrder = 5; +>; + +Texture2D MicroCavityTexture < + string UIGroup = "Micro Details"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Micro Cavity Map"; + string ResourceType = "2D"; + int mipmaplevels = 0; + int UIOrder = 701; + int UVEditorOrder = 5; +>; + +Texture2D MicroNormalTexture < + string UIGroup = "Micro Details"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Micro Normal Map"; + string ResourceType = "2D"; + int mipmaplevels = 0; + int UIOrder = 704; + int UVEditorOrder = 5; +>; + +#ifdef _SUPPORTTESSELLATION_ +Texture2D DisplacementTexture < + string UIGroup = "Tessellation and Displacement"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Displacement Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 902; + int UVEditorOrder = 8; +>; +#endif + +Texture2D BackScatteringThicknessTexture < + string UIGroup = "BackScattering"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Thickness Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 215; + int UVEditorOrder = 10; +>; + +Texture2D OpacityMaskTexture < + string UIGroup = "Opacity"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Opacity Mask"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 800; + int UVEditorOrder = 12; +>; + +TextureCube DiffuseCubeIBL < + string UIGroup = "IBL Settings"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Diffuse Cubemap"; + string ResourceType = "Cube"; + int mipmaplevels = 0; // Use (or load) max number of mip map levels so we can use blurring + int UIOrder = 108; + int UVEditorOrder = 10; +>; + +TextureCube SpecularCubeIBL : environment < + string UIGroup = "IBL Settings"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Specular Cubemap"; + string ResourceType = "Cube"; + int mipmaplevels = 0; + int UIOrder = 111; + int UVEditorOrder = 6; +>; + +//------------------------------------ +// Shadow Maps +//------------------------------------ +Texture2D light0ShadowMap : SHADOWMAP < + string Object = "Light 0"; // UI Group for lights, auto-closed + string UIWidget = "None"; + int UIOrder = 5010; +>; + +Texture2D light1ShadowMap : SHADOWMAP < + string Object = "Light 1"; + string UIWidget = "None"; + int UIOrder = 5020; +>; + +Texture2D light2ShadowMap : SHADOWMAP < + string Object = "Light 2"; + string UIWidget = "None"; + int UIOrder = 5030; +>; + +//------------------------------------ +// Internal depth textures for Maya depth-peeling transparency +//------------------------------------ +#ifdef _MAYA_ + +Texture2D transpDepthTexture : transpdepthtexture < + string UIWidget = "None"; +>; + +Texture2D opaqueDepthTexture : opaquedepthtexture < + string UIWidget = "None"; +>; + +#endif + +//------------------------------------ +// Per Frame parameters +//------------------------------------ +cbuffer UpdatePerFrame : register(b0) { + float4x4 viewInv : ViewInverse < string UIWidget = "None"; >; + float4x4 view : View < string UIWidget = "None"; >; + float4x4 prj : Projection < string UIWidget = "None"; >; + float4x4 viewPrj : ViewProjection < string UIWidget = "None"; >; + + // A shader may wish to do different actions when Maya is rendering the preview swatch (e.g. disable displacement) + // This value will be true if Maya is rendering the swatch + bool IsSwatchRender : MayaSwatchRender < string UIWidget = "None"; > = false; + float2 screenSize : ViewportPixelSize < string UIWidget = "None"; >; + + // If the user enables viewport gamma correction in Maya's global viewport rendering settings, the shader should not do gamma again + bool MayaFullScreenGamma : MayaGammaCorrection < string UIWidget = "None"; > = false; +} + + +//------------------------------------ +// Per Object parameters +//------------------------------------ +cbuffer UpdatePerObject : register(b1) { + float4x4 world : World < string UIWidget = "None"; >; + float4x4 worldIT : WorldInverseTranspose < string UIWidget = "None"; >; +#ifndef _SUPPORTTESSELLATION_ + float4x4 wvp : WorldViewProjection < string UIWidget = "None"; >; +#endif + +// --------------------------------------------- +// Lighting Settings GROUP +// --------------------------------------------- +bool LinearSpaceLighting < + string UIGroup = "Lighting Settings"; + string UIName = "Linear Space Lighting"; + int UIOrder = 100; +> = true; + +bool UseShadows < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string UIGroup = "Lighting Settings"; + string UIName = "Shadows"; + int UIOrder = 101; +#endif +> = true; + +float shadowMultiplier < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string UIGroup = "Lighting Settings"; + string UIWidget = "Slider"; + float UIMin = 0.000; + float UIMax = 1.000; + float UIStep = 0.001; + string UIName = "Shadow Strength"; + int UIOrder = 102; +#endif +> = { 1.0f }; + +// This offset allows you to fix any in-correct self shadowing caused by limited precision. +// This tends to get affected by scene scale and polygon count of the objects involved. +float shadowDepthBias : ShadowMapBias < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string UIGroup = "Lighting Settings"; + string UIWidget = "Slider"; + float UIMin = 0.000; + float UISoftMax = 10.000; + float UIStep = 0.001; + string UIName = "Shadow Bias"; + int UIOrder = 103; +#endif +> = { 0.01f }; + +// flips back facing normals to improve lighting for things like sheets of hair or leaves +bool flipBackfaceNormals < + string UIGroup = "Lighting Settings"; + string UIName = "Double Sided Lighting"; + int UIOrder = 104; +> = true; + +// -- light props are inserted here via UIOrder 20 - 49 + +// --------------------------------------------- +// IBL Settings GROUP +// --------------------------------------------- + +float SkyRotation < + string UIGroup = "IBL Settings"; + string UIName = "Sky Rotation"; + float UISoftMin = 0; + float UISoftMax = 360; + float UIMin = 0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 1; + int UIOrder = 105; + string UIWidget = "Slider"; +> = { 0.0f }; + +bool UseDiffuseIBLMap < + string UIGroup = "IBL Settings"; + string UIName = "Use Diffuse Cubemap"; + int UIOrder = 106; +> = false; + +float DiffuseIBLIntensity < + string UIGroup = "IBL Settings"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 2.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.001; + string UIName = "Diffuse IBL Intensity"; + int UIOrder = 107; +> = 1.0; + +bool UseSpecCubeIBL < + string UIGroup = "IBL Settings"; + string UIName = "Use Specular Cubemap"; + int UIOrder = 109; +> = false; + +float SpecularIBLIntensity < + string UIGroup = "IBL Settings"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 2.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.001; + string UIName = "Specular IBL Intensity"; + int UIOrder = 110; +> = 1.0; + +// --------------------------------------------- +// Diffuse GROUP +// --------------------------------------------- + +bool UseDiffuseTexture < + string UIGroup = "Diffuse"; + string UIName = "Use Diffuse Map"; + int UIOrder = 200; +> = false; + + +bool UseDiffuseTextureAlpha < + string UIGroup = "Diffuse"; + string UIName = "Use Diffuse Map Alpha"; + int UIOrder = 201; +> = false; + +float3 DiffuseColor : Diffuse < + string UIGroup = "Diffuse"; + string UIName = "Diffuse Color"; + string UIWidget = "ColorPicker"; + int UIOrder = 202; +> = { 1.0f, 1.0f, 1.0f }; + +// --------------------------------------------- +// SSS GROUP +// --------------------------------------------- + +float skinCoeffX < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Coeffient R"; + int UIOrder = 204; +> = 1.0; + +float skinCoeffY < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Coeffient G"; + int UIOrder = 205; +> = 0.5; + +float skinCoeffZ < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Coeffient B"; + int UIOrder = 206; +> = 0.25; + +float NormalBlurring < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Softness"; + int UIOrder = 207; +> = 0.25; + +bool UseScatteringRadiusTexture < + string UIGroup = "SubSurfaceScattering"; + string UIName = "Use SSS Radius Map"; + int UIOrder = 209; +> = false; + +float skinScattering < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Radius"; + int UIOrder = 210; +> = 0.25; + +float shadowBlur < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Shadow Blur"; + int UIOrder = 211; +> = 1.0; + +float shadowDither < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Shadow Dither"; + int UIOrder = 211; +> = 1.0; + +float shadowScattering < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Shadow Scattering"; + int UIOrder = 212; +> = 1.0; + +float shadowSaturation < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 4.0; + float UIMax = 4; + float UIStep = 0.1; + string UIName = "SSS Shadow Saturation"; + int UIOrder = 213; +> = 1.0; + +// --------------------------------------------- +// BackScattering GROUP +// --------------------------------------------- + +bool UseTranslucency < + string UIGroup = "BackScattering"; + string UIName = "Back Scattering"; + int UIOrder = 214; +> = false; + +bool UseThicknessTexture < + string UIGroup = "BackScattering"; + string UIName = "Use Thickness Map"; + int UIOrder = 216; +> = false; + +float skinScatteringRoughness < + string UIGroup = "BackScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "Back Scattering Width"; + int UIOrder = 217; +> = 1.0; + +/*float3 skinScatteringInnerColor < + string UIGroup = "BackScattering"; + string UIName = "Back Scattering Inner Color"; + string UIWidget = "ColorPicker"; + int UIOrder = 215; +> = {0.25f, 0.05f, 0.02f };*/ + +float3 skinScatteringOuterColor < + string UIGroup = "BackScattering"; + string UIName = "Back Scattering Color"; + string UIWidget = "ColorPicker"; + int UIOrder = 218; +> = { 0.25f, 0.05f, 0.02f }; + +float skinScatteringAmount < + string UIGroup = "BackScattering"; + float UIMin = 0.0; + float UISoftMax = 6.0; + float UIMax = 6; + float UIStep = 0.1; + string UIName = "Back Scattering Amount"; + int UIOrder = 219; +> = 1.0; + +float skinAmbientScatteringAmount < + string UIGroup = "BackScattering"; + float UIMin = 0.0; + float UISoftMax = 6.0; + float UIMax = 6; + float UIStep = 0.1; + string UIName = "Back Scattering Ambient Amount"; + int UIOrder = 220; +> = 1.0; + +/* float skinScatteringPlane < + string UIGroup = "BackScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "Back Scattering Far Plane"; + int UIOrder = 218; +> = 1.0;*/ + +// --------------------------------------------- +// Specular GROUP +// --------------------------------------------- + +bool UseSpecularTexture < + string UIGroup = "Specular"; + string UIName = "Use Specular Map"; + int UIOrder = 301; +> = false; + +bool UseSpecularTextureAlpha < + string UIGroup = "Specular"; + string UIName = "Use Roughness Map Alpha"; + int UIOrder = 301; +> = false; + +float3 SpecularColor : Specular < + string UIGroup = "Specular"; + string UIName = "Specular Color"; + string UIWidget = "ColorPicker"; + int UIOrder = 303; +> = { 1.0f, 1.0f, 1.0f }; + + +float LobeMix < + string UIGroup = "Specular"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1.0; + float UIStep = 0.01; + string UIName = "Lobe Mixing"; + int UIOrder = 304; +> = 0.75; + +float Roughness < + string UIGroup = "Specular"; + string UIWidget = "Slider"; + float UIMin = 0.01; + float UISoftMax = 1.0; + float UIMax = 1.0; + float UIStep = 0.01; + string UIName = "Roughness multiplier"; + int UIOrder = 305; +> = .2; + +// --------------------------------------------- +// Occlusion GROUP +// --------------------------------------------- + +bool UseAmbientOcclusionTexture < + string UIGroup = "Occlusion"; + string UIName = "Use Occlusion Map"; + int UIOrder = 400; +> = false; + +float OcclusionAmount < + string UIGroup = "Occlusion"; + string UIWidget = "Slider"; + float UIMin = 0.01; + float UISoftMax = 2.0; + float UIMax = 2.0; + float UIStep = 0.01; + string UIName = "Occlusion Amount"; + int UIOrder = 402; +> = 1.0; + +// --------------------------------------------- +// Cavity GROUP +// --------------------------------------------- + +bool UseCavityTexture < + string UIGroup = "Cavity"; + string UIName = "Use Cavity Map"; + int UIOrder = 500; +> = false; + +float CavityAmount < + string UIGroup = "Cavity"; + string UIWidget = "Slider"; + float UIMin = 0.01; + float UISoftMax = 2.0; + float UIMax = 2.0; + float UIStep = 0.01; + string UIName = "Cavity Amount"; + int UIOrder = 502; +> = 1.0; + +// --------------------------------------------- +// Normal GROUP +// --------------------------------------------- +bool UseNormalTexture < + string UIGroup = "Normal"; + string UIName = "Use Normal Map"; + int UIOrder = 600; +> = false; + +float NormalHeight < + string UIGroup = "Normal"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 5.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + string UIName = "Normal Height"; + int UIOrder = 603; +> = 1.0; + +bool SupportNonUniformScale < + string UIGroup = "Normal"; + string UIName = "Support Non-Uniform Scale"; + int UIOrder = 604; +> = true; + +int NormalCoordsysX < + string UIGroup = "Normal"; + string UIWidget = "Slider"; + float UIMin = 0; + float UIMax = 1; + float UIStep = 1; + string UIFieldNames = "Positive:Negative"; + string UIName = "Normal X (Red)"; + int UIOrder = 605; +> = 0; + +int NormalCoordsysY < + string UIGroup = "Normal"; + string UIWidget = "Slider"; + float UIMin = 0; + float UIMax = 1; + float UIStep = 1; + string UIFieldNames = "Positive:Negative"; + string UIName = "Normal Y (Green)"; + int UIOrder = 606; +> = 0; + +// --------------------------------------------- +// Micro Details GROUP +// --------------------------------------------- + +bool UseMicroCavityTexture < + string UIGroup = "Micro Details"; + string UIName = "Use Micro Cavity Map"; + int UIOrder = 700; +> = false; + +float MicroCavityAmount < + string UIGroup = "Micro Details"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 2.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + string UIName = "Micro Cavity Amount"; + int UIOrder = 702; +> = 1.0; + +bool UseMicroNormalTexture < + string UIGroup = "Micro Details"; + string UIName = "Use Micro Normal Map"; + int UIOrder = 703; +> = false; + +float MicroNormalHeight < + string UIGroup = "Micro Details"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 5.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + string UIName = "Micro Normal Height"; + int UIOrder = 705; +> = 1.0; + +float MicroScale < + string UIGroup = "Micro Details"; + string UIWidget = "Slider"; + float UIMin = 16.0; + float UISoftMax = 256.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + string UIName = "Micro Scale"; + int UIOrder = 706; +> = 32; + +// --------------------------------------------- +// Opacity GROUP +// --------------------------------------------- +float Opacity : OPACITY < + string UIGroup = "Opacity"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UIMax = 1.0; + float UIStep = 0.001; + string UIName = "Opacity"; + int UIOrder = 801; +> = 1.0; + +bool UseOpacityMaskTexture < + string UIGroup = "Opacity"; + string UIName = "Opacity Mask"; + int UIOrder = 802; +> = false; + +// at what value do we clip away pixels +float OpacityMaskBias < + string UIGroup = "Opacity"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UIMax = 1.0; + float UIStep = 0.001; + string UIName = "Opacity Mask Bias"; + int UIOrder = 803; +> = 0.1; + +#ifdef _SUPPORTTESSELLATION_ +// --------------------------------------------- +// Tessellation and Displacement GROUP +// --------------------------------------------- +int DisplacementModel < + string UIGroup = "Tessellation and Displacement"; + string UIName = "Displacement Model"; + string UIFieldNames = "Grayscale:Tangent Vector"; + float UIMin = 0; + float UIMax = 1; + float UIStep = 1; + int UIOrder = 900; +> = false; + +bool UseDisplacementMap < + string UIGroup = "Tessellation and Displacement"; + string UIName = "Displacement Map"; + int UIOrder = 901; +> = false; + +int VectorDisplacementCoordSys < + string UIGroup = "Tessellation and Displacement"; + string UIWidget = "Slider"; + string UIFieldNames = "Mudbox (XZY):Maya (XYZ)"; + string UIName = "Displacement Coordsys"; + float UIMin = 0; + float UIMax = 1; + float UIStep = 1; + int UIOrder = 903; +> = 0; + +float DisplacementHeight < + string UIGroup = "Tessellation and Displacement"; + float UISoftMin = 0.0; + float UISoftMax = 10.0; + string UIName = "Displacement Height"; + float UIMin = -(_3DSMAX_SPIN_MAX); + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.1; + int UIOrder = 904; +> = 0.5; + +// This allows you to control what the 'base' value for displacement is. +// When the offset value is 0.5, that means that a gray value (color: 128,128,128) will get 0 displacement. +// A value of 0 would then dent in. +// A value of 1 would then extrude. +float DisplacementOffset < + string UIGroup = "Tessellation and Displacement"; + float UISoftMin = -1.0; + float UISoftMax = 1.0; + float UIMin = -(_3DSMAX_SPIN_MAX); + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.1; + string UIName = "Displacement Offset"; + int UIOrder = 905; +> = 0.5; + +// This gives the artist control to prevent this shader from clipping away faces to quickly when displacement is actually keeping the faces on screen. +// This is also important for e.g. shadow map generation to make sure displaced vertices are not clipped out of the light's view +// See BBoxExtraScale for artist control over Maya clipping the entire object away when it thinks it leaves the view. +float DisplacementClippingBias < + string UIGroup = "Tessellation and Displacement"; + float UISoftMin = 0.0; + float UISoftMax = 99.0; + float UIMin = -(_3DSMAX_SPIN_MAX); + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.5; + string UIName = "Displacement Clipping Bias"; + int UIOrder = 906; +> = 5.0; + +// This gives the artist control to prevent maya from clipping away the entire object to fast in case displacement is used. +// Its semantic has to be BoundingBoxExtraScale +float BBoxExtraScale : BoundingBoxExtraScale < + string UIGroup = "Tessellation and Displacement"; + float UIMin = 1.0; + float UISoftMax = 10.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.5; + string UIName = "Bounding Box Extra Scale"; + int UIOrder = 907; +> = 1.0; + +float TessellationRange < + string UIGroup = "Tessellation and Displacement"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 999.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 1.0; + string UIName = "Tessellation Range"; + int UIOrder = 908; +> = { 0 }; + +float TessellationMin < + string UIGroup = "Tessellation and Displacement"; + float UIMin = 1.0; + float UISoftMax = 10.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.5; + string UIName = "Tessellation Minimum"; + int UIOrder = 909; +> = 3.0; + +float FlatTessellation < + string UIGroup = "Tessellation and Displacement"; + float UIMin = 0.0; + float UIMax = 1.0; + float UIStep = 0.1; + string UIName = "Flat Tessellation"; + int UIOrder = 910; +> = 0.0; +#endif + +// --------------------------------------------- +// UV assignment GROUP +// --------------------------------------------- +// Use the Surface Data Section to set your UVset names for each Texcoord. +// E.g. TexCoord1 = uv:UVset +// Then pick a Texcoord in the UV Section to use that UVset for a texture. + +int DiffuseTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Diffuse Map UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2002; +> = 0; + +int OcclusionTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Ambient Occlusion Map UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2003; +> = 1; + +int OpacityMaskTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Opacity Mask UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2005; +> = 0; + +int SpecularTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Specular Map UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2006; +> = 0; + +int NormalTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Normal Map UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2008; +> = 0; + +#ifdef _SUPPORTTESSELLATION_ +int DisplacementTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Displacement Map UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2010; +> = 0; +#endif + +int ThicknessTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Translucency Mask UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2011; +> = 0; +} //end UpdatePerObject cbuffer + +//------------------------------------ +// Light parameters +//------------------------------------ +cbuffer UpdateLights : register(b2) { +// --------------------------------------------- +// Light 0 GROUP +// --------------------------------------------- +// This value is controlled by Maya to tell us if a light should be calculated +// For example the artist may disable a light in the scene, or choose to see only the selected light +// This flag allows Maya to tell our shader not to contribute this light into the lighting +bool light0Enable : LIGHTENABLE < +string Object = "Light 0"; // UI Group for lights, auto-closed +string UIName = "Enable Light 0"; +int UIOrder = 20; +#ifdef _MAYA_ +> = false; // maya manages lights itself and defaults to no lights +#else +> = true; // in 3dsMax we should have the default light enabled +#endif + +// follows LightParameterInfo::ELightType +// spot = 2, point = 3, directional = 4, ambient = 5, +int light0Type : LIGHTTYPE < + string Object = "Light 0"; + string UIName = "Light 0 Type"; + string UIFieldNames = "None:Default:Spot:Point:Directional:Ambient"; + int UIOrder = 21; + float UIMin = 0; + float UIMax = 5; + float UIStep = 1; +> = 2; // default to spot so the cone angle etc work when "Use Shader Settings" option is used + +float3 light0Pos : POSITION < + string Object = "Light 0"; + string UIName = "Light 0 Position"; + string Space = "World"; + int UIOrder = 22; + int RefID = 0; // 3DSMAX +> = { 100.0f, 100.0f, 100.0f }; + +float3 light0Color : LIGHTCOLOR < + string Object = "Light 0"; +#ifdef _3DSMAX_ + int LightRef = 0; + string UIWidget = "None"; +#else + string UIName = "Light 0 Color"; + string UIWidget = "Color"; + int UIOrder = 23; +#endif +> = { 1.0f, 1.0f, 1.0f }; + +float light0Intensity : LIGHTINTENSITY < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 0"; + string UIName = "Light 0 Intensity"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 24; +#endif +> = { 1.0f }; + +float3 light0Dir : DIRECTION < + string Object = "Light 0"; + string UIName = "Light 0 Direction"; + string Space = "World"; + int UIOrder = 25; + int RefID = 0; // 3DSMAX +> = { 100.0f, 100.0f, 100.0f }; + +#ifdef _MAYA_ +float light0ConeAngle : HOTSPOT // In radians +#else +float light0ConeAngle : LIGHTHOTSPOT +#endif +< + string Object = "Light 0"; +#ifdef _3DSMAX_ + int LightRef = 0; + string UIWidget = "None"; +#else + string UIName = "Light 0 Cone Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 26; +#endif +> = { 0.46f }; + +#ifdef _MAYA_ +float light0FallOff : FALLOFF // In radians. Sould be HIGHER then cone angle or lighted area will invert +#else +float light0FallOff : LIGHTFALLOFF +#endif +< + string Object = "Light 0"; +#ifdef _3DSMAX_ + int LightRef = 0; + string UIWidget = "None"; +#else + string UIName = "Light 0 Penumbra Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 27; +#endif +> = { 0.7f }; + +float light0AttenScale : DECAYRATE < + string Object = "Light 0"; + string UIName = "Light 0 Decay"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 28; +> = { 0.0 }; + +bool light0ShadowOn : SHADOWFLAG < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 0"; + string UIName = "Light 0 Casts Shadow"; + string UIWidget = "None"; + int UIOrder = 29; +#endif +> = true; + +float4x4 light0Matrix : SHADOWMAPMATRIX < + string Object = "Light 0"; + string UIWidget = "None"; +>; + +// --------------------------------------------- +// Light 1 GROUP +// --------------------------------------------- +bool light1Enable : LIGHTENABLE < + string Object = "Light 1"; + string UIName = "Enable Light 1"; + int UIOrder = 30; +> = false; + +int light1Type : LIGHTTYPE < + string Object = "Light 1"; + string UIName = "Light 1 Type"; + string UIFieldNames = "None:Default:Spot:Point:Directional:Ambient"; + float UIMin = 0; + float UIMax = 5; + int UIOrder = 31; +> = 2; + +float3 light1Pos : POSITION < + string Object = "Light 1"; + string UIName = "Light 1 Position"; + string Space = "World"; + int UIOrder = 32; + int RefID = 1; // 3DSMAX +> = { -100.0f, 100.0f, 100.0f }; + +float3 light1Color : LIGHTCOLOR < + string Object = "Light 1"; +#ifdef _3DSMAX_ + int LightRef = 1; + string UIWidget = "None"; +#else + string UIName = "Light 1 Color"; + string UIWidget = "Color"; + int UIOrder = 33; +#endif +> = { 1.0f, 1.0f, 1.0f }; + +float light1Intensity : LIGHTINTENSITY < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 1"; + string UIName = "Light 1 Intensity"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 34; +#endif +> = { 1.0f }; + +float3 light1Dir : DIRECTION < + string Object = "Light 1"; + string UIName = "Light 1 Direction"; + string Space = "World"; + int UIOrder = 35; + int RefID = 1; // 3DSMAX +> = { 100.0f, 100.0f, 100.0f }; + +#ifdef _MAYA_ +float light1ConeAngle : HOTSPOT // In radians +#else +float light1ConeAngle : LIGHTHOTSPOT +#endif +< + string Object = "Light 1"; +#ifdef _3DSMAX_ + int LightRef = 1; + string UIWidget = "None"; +#else + string UIName = "Light 1 Cone Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 36; +#endif +> = { 45.0f }; + +#ifdef _MAYA_ +float light1FallOff : FALLOFF // In radians. Sould be HIGHER then cone angle or lighted area will invert +#else +float light1FallOff : LIGHTFALLOFF +#endif +< + string Object = "Light 1"; +#ifdef _3DSMAX_ + int LightRef = 1; + string UIWidget = "None"; +#else + string UIName = "Light 1 Penumbra Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 37; +#endif +> = { 0.0f }; + +float light1AttenScale : DECAYRATE < + string Object = "Light 1"; + string UIName = "Light 1 Decay"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 38; +> = { 0.0 }; + +bool light1ShadowOn : SHADOWFLAG < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 1"; + string UIName = "Light 1 Casts Shadow"; + string UIWidget = "None"; + int UIOrder = 39; +#endif +> = true; + +float4x4 light1Matrix : SHADOWMAPMATRIX < + string Object = "Light 1"; + string UIWidget = "None"; +>; + +// --------------------------------------------- +// Light 2 GROUP +// --------------------------------------------- +bool light2Enable : LIGHTENABLE < + string Object = "Light 2"; + string UIName = "Enable Light 2"; + int UIOrder = 40; +> = false; + +int light2Type : LIGHTTYPE < + string Object = "Light 2"; + string UIName = "Light 2 Type"; + string UIFieldNames = "None:Default:Spot:Point:Directional:Ambient"; + float UIMin = 0; + float UIMax = 5; + int UIOrder = 41; +> = 2; + +float3 light2Pos : POSITION < + string Object = "Light 2"; + string UIName = "Light 2 Position"; + string Space = "World"; + int UIOrder = 42; + int RefID = 2; // 3DSMAX +> = { 100.0f, 100.0f, -100.0f }; + +float3 light2Color : LIGHTCOLOR < + string Object = "Light 2"; +#ifdef _3DSMAX_ + int LightRef = 2; + string UIWidget = "None"; +#else + string UIName = "Light 2 Color"; + string UIWidget = "Color"; + int UIOrder = 43; +#endif +> = { 1.0f, 1.0f, 1.0f }; + +float light2Intensity : LIGHTINTENSITY < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 2"; + string UIName = "Light 2 Intensity"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 44; +#endif +> = { 1.0f }; + +float3 light2Dir : DIRECTION < + string Object = "Light 2"; + string UIName = "Light 2 Direction"; + string Space = "World"; + int UIOrder = 45; + int RefID = 2; // 3DSMAX +> = { 100.0f, 100.0f, 100.0f }; + +#ifdef _MAYA_ +float light2ConeAngle : HOTSPOT // In radians +#else +float light2ConeAngle : LIGHTHOTSPOT +#endif +< + string Object = "Light 2"; +#ifdef _3DSMAX_ + int LightRef = 2; + string UIWidget = "None"; +#else + string UIName = "Light 2 Cone Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 46; +#endif +> = { 45.0f }; + +#ifdef _MAYA_ +float light2FallOff : FALLOFF // In radians. Sould be HIGHER then cone angle or lighted area will invert +#else +float light2FallOff : LIGHTFALLOFF +#endif +< +string Object = "Light 2"; +#ifdef _3DSMAX_ + int LightRef = 2; + string UIWidget = "None"; +#else + string UIName = "Light 2 Penumbra Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 47; +#endif +> = { 0.0f }; + +float light2AttenScale : DECAYRATE < + string Object = "Light 2"; + string UIName = "Light 2 Decay"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 48; +> = { 0.0 }; + +bool light2ShadowOn : SHADOWFLAG < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 2"; + string UIName = "Light 2 Casts Shadow"; + string UIWidget = "None"; + int UIOrder = 49; +#endif +> = true; + +float4x4 light2Matrix : SHADOWMAPMATRIX < + string Object = "Light 2"; + string UIWidget = "None"; +>; + +} //end lights cbuffer + +//------------------------------------ +// Structs +//------------------------------------ +struct APPDATA { + float3 position : POSITION; + float2 texCoord0 : TEXCOORD0; + float2 texCoord1 : TEXCOORD1; + float2 texCoord2 : TEXCOORD2; + float3 normal : NORMAL; + float3 binormal : BINORMAL; + float3 tangent : TANGENT; +}; + +struct SHADERDATA { + float4 position : SV_Position; + float2 texCoord0 : TEXCOORD0; + float2 texCoord1 : TEXCOORD1; + float2 texCoord2 : TEXCOORD2; + float3 worldNormal : NORMAL; + float4 worldTangent : TANGENT; + float3 worldPosition : TEXCOORD3; + float4 screenCoord : TEXCOORD14; + +#ifdef _SUPPORTTESSELLATION_ + // Geometry generated control points: + // .worldPosition is CP0, so we don't need to store it again + float3 CP1 : TEXCOORD4; + float3 CP2 : TEXCOORD5; + + // PN-AEN with displacement fix: + float4 dominantEdge : TEXCOORD6; // both vertices of an edge + float2 dominantVertex : TEXCOORD7; // corner + + // Dominant normal and tangent for VDM crack fix: + // this could be compacted into less texcoords, but left as-is for readability + float3 dominantNormalE0 : TEXCOORD8; + float3 dominantNormalE1 : TEXCOORD9; + float3 dominantNormalCorner : TEXCOORD10; + + float3 dominantTangentE0 : TEXCOORD11; + float3 dominantTangentE1 : TEXCOORD12; + float3 dominantTangentCorner : TEXCOORD13; + + float clipped : CLIPPED; +#endif +}; + + +#ifdef _SUPPORTTESSELLATION_ +struct HSCONSTANTDATA { + float TessFactor[3] : SV_TessFactor; // tessellation amount for each edge of patch + float InsideTessFactor : SV_InsideTessFactor; // tessellation amount within a patch surface (would be float2 for quads) + float3 CPCenter : CENTER; // Geometry generated center control point +}; +#endif + +//------------------------------------ +// BRDF +//------------------------------------ + +float sqr(float x) { + return x*x; +} + +// [Beckmann 1963, "The scattering of electromagnetic waves from rough surfaces"] +float D_Beckmann(float Roughness, float NoH) { + float m = Roughness; + float m2 = m * m; + + float NdotH2 = sqr(NoH); + return exp((NdotH2 - 1) / (m2 * NdotH2)) / (PI * m2 * NdotH2 * NdotH2); +} + +// This function is from Nvidia's Human Head demo +float D_BeckmannNVIDIA(float m, float ndoth) { + float alpha = acos(ndoth); + float ta = tan(alpha); + float val = 1.0 / (m*m*pow(ndoth, 4.0)) * exp(-(ta*ta) / (m*m)); + return val; +} + +// Schlick 1994, "An Inexpensive BRDF Model for Physically-Based Rendering" +// Lagarde 2012, "Spherical Gaussian approximation for Blinn-Phong, Phong and Fresnel" +float3 F_Schlick(float3 SpecularColor, float LdotH) { + return SpecularColor + (1.0f - SpecularColor) * exp2((-5.55473 * LdotH - 6.98316) * LdotH); +} + +// Schlick 1994, "An Inexpensive BRDF Model for Physically-Based Rendering" +// Lagarde 2011, "Adopting a physically based shading model" +// Lagarde 2012, "Spherical Gaussian approximation for Blinn-Phong, Phong and Fresnel" +float3 F_LagardeSchlick(float3 SpecularColor, float Roughness, float NdotV) { + return SpecularColor + (max(1 - Roughness, SpecularColor) - SpecularColor) * exp2((-5.55473 * NdotV - 6.98316) * NdotV); +} + +float3 F_KelemenSzirmaykalos(float3 H, float3 V, float3 F0) { + float base = 1.0 - dot(V, H); + float exponential = pow(base, 5.0); + return exponential + F0 * (1.0 - exponential); +} + +float3 KelemenSzirmaykalos(float3 N, float3 L, float3 V, float roughness, float3 specular) { + float3 result = float3(0.0, 0.0, 0.0); + float NdotL = dot(N, L); + + if (NdotL > 0.0) { + float3 h = L + V; + float3 H = normalize(h); + float NdotH = dot(N, H); + float VdotH = dot(V, H); + float D = D_BeckmannNVIDIA(roughness, NdotH); + float3 F = F_Schlick(specular, VdotH); + float G = 1; + float3 specularDirect = max(D * G * F / dot(h, h), 0); + result = specularDirect * NdotL; // Specular is added for more tuning + } + return result; +} + +float3 PennerSkin(float3 skinCoef, float3 N, float3 L, float3 Nlow, float Curvature) { + float3 pennerX = lerp(N, Nlow, skinCoef.x); + float3 pennerY = lerp(N, Nlow, skinCoef.y); + float3 pennerZ = lerp(N, Nlow, skinCoef.z); + + float3 pennerNdotL = float3(dot(pennerX, L), dot(pennerY, L), dot(pennerZ, L)); + pennerNdotL = saturate(pennerNdotL * 0.5 + 0.5); + + float3 pennerlookUp; + pennerlookUp.r = LutTexture.Sample(SamplerAnisoClamp, float2(pennerNdotL.r, Curvature)).r; + pennerlookUp.g = LutTexture.Sample(SamplerAnisoClamp, float2(pennerNdotL.g, Curvature)).g; + pennerlookUp.b = LutTexture.Sample(SamplerAnisoClamp, float2(pennerNdotL.b, Curvature)).b; + + return pennerlookUp; +} + +float3 PennerSkinNoLUT(float3 skinCoef, float3 N, float3 L, float3 Nlow) { + float3 pennerX = lerp(N, Nlow, skinCoef.x); + float3 pennerY = lerp(N, Nlow, skinCoef.y); + float3 pennerZ = lerp(N, Nlow, skinCoef.z); + + float3 pennerNdotL = float3(dot(pennerX, L), dot(pennerY, L), dot(pennerZ, L)); + + float3 pennerlookUp; + pennerlookUp.r = saturate(pennerNdotL.r*(float3(1, 1, 1).r - skinCoef.r) + skinCoef.r) * (1 - skinCoef.r); + pennerlookUp.g = saturate(pennerNdotL.g*(float3(1, 1, 1).g - skinCoef.g) + skinCoef.g) * (1 - skinCoef.g); + pennerlookUp.b = saturate(pennerNdotL.b*(float3(1, 1, 1).b - skinCoef.b) + skinCoef.b) * (1 - skinCoef.b); + + return pennerlookUp; +} + +float3 diffuseSkinIBL(float3 skinCoef, float3 diffuseIBL_HighFreq, float3 diffuseIBL_LowFreq) { + return lerp(diffuseIBL_HighFreq, diffuseIBL_LowFreq, skinCoef); +} + +//------------------------------------ +// Functions +//------------------------------------ + +float4 ComputeScreenPos(float4 pos) { +#if UNITY_UV_STARTS_AT_TOP + float scale = -1.0; +#else + float scale = 1.0; +#endif + + float4 o = pos * 0.5f; + o.xy = float2(o.x, o.y*scale) + o.w; + o.zw = pos.zw; + + return o; +} + +// Occlusion taking into account the color of the texture multiplied to it +float3 coloredOcclusion(float3 color, float occlusion) { + float3 coloredOcclusion = lerp(float3(1.0f, 1.0f, 1.0f), color, (1 - occlusion)); + //color *= coloredOcclusion; + return coloredOcclusion; +} + +float specularOcclusion(float3 N, float3 V, float Occlusion) { + const float specularPow = 5.0; + float NdotV = dot(N, V); + float s = saturate(-0.3 + NdotV * NdotV); + + return lerp(pow(Occlusion, specularPow), 1.0, s); +} + +float2 pickTexcoord(int index, float2 t0, float2 t1, float2 t2) { + float2 tcoord = t0; + + if (index == 1) { + tcoord = t1; + } else if (index == 2) { + tcoord = t2; + } + + return tcoord; +} + +float3 RotateVectorYaw(float3 vec, float degreeOfRotation) { + float3 rotatedVec = vec; + float angle = radians(degreeOfRotation); + + rotatedVec.x = (cos(angle) * vec.x) - (sin(angle) * vec.z); + rotatedVec.z = (sin(angle) * vec.x) + (cos(angle) * vec.z); + + return rotatedVec; +} + +// Spot light cone +float lightConeangle(float coneAngle, float coneFalloff, float3 lightVec, float3 lightDir) { + // the cone falloff should be equal or bigger then the coneAngle or the light inverts + // this is added to make manually tweaking the spot settings easier. + if (coneFalloff < coneAngle) { + coneFalloff = coneAngle; + } + + float LdotDir = dot(normalize(lightVec), lightDir); + + // cheaper cone, no fall-off control would be: + // float cone = pow(saturate(LdotDir), 1 / coneAngle); + + // higher quality cone (more expensive): + float cone = smoothstep(cos(coneFalloff), cos(coneAngle), LdotDir); + + return cone; +} + +#define SHADOW_FILTER_TAPS_CNT 10 + +float2 SuperFilterTaps[SHADOW_FILTER_TAPS_CNT] < string UIWidget = "None"; > = { + { -0.84052f, -0.073954f }, + { -0.326235f, -0.40583f }, + { -0.698464f, 0.457259f }, + { -0.203356f, 0.6205847f }, + { 0.96345f, -0.194353f }, + { 0.473434f, -0.480026f }, + { 0.519454f, 0.767034f }, + { 0.185461f, -0.8945231f }, + { 0.507351f, 0.064963f }, + { -0.321932f, 0.5954349f } +}; + +static float4 kernel[25] = { + { 0.530605, 0.613514, 0.739601, 0 }, + { 0.000973794, 1.11862e-005, 9.43437e-007, -3 }, + { 0.00333804, 7.85443e-005, 1.2945e-005, -2.52083 }, + { 0.00500364, 0.00020094, 5.28848e-005, -2.08333 }, + { 0.00700976, 0.00049366, 0.000151938, -1.6875 }, + { 0.0094389, 0.00139119, 0.000416598, -1.33333 }, + { 0.0128496, 0.00356329, 0.00132016, -1.02083 }, + { 0.017924, 0.00711691, 0.00347194, -0.75 }, + { 0.0263642, 0.0119715, 0.00684598, -0.520833 }, + { 0.0410172, 0.0199899, 0.0118481, -0.333333 }, + { 0.0493588, 0.0367726, 0.0219485, -0.1875 }, + { 0.0402784, 0.0657244, 0.04631, -0.0833333 }, + { 0.0211412, 0.0459286, 0.0378196, -0.0208333 }, + { 0.0211412, 0.0459286, 0.0378196, 0.0208333 }, + { 0.0402784, 0.0657244, 0.04631, 0.0833333 }, + { 0.0493588, 0.0367726, 0.0219485, 0.1875 }, + { 0.0410172, 0.0199899, 0.0118481, 0.333333 }, + { 0.0263642, 0.0119715, 0.00684598, 0.520833 }, + { 0.017924, 0.00711691, 0.00347194, 0.75 }, + { 0.0128496, 0.00356329, 0.00132016, 1.02083 }, + { 0.0094389, 0.00139119, 0.000416598, 1.33333 }, + { 0.00700976, 0.00049366, 0.000151938, 1.6875 }, + { 0.00500364, 0.00020094, 5.28848e-005, 2.08333 }, + { 0.00333804, 7.85443e-005, 1.2945e-005, 2.52083 }, + { 0.000973794, 1.11862e-005, 9.43437e-007, 3 } +}; + + +static float2 kernelRandom[32] = { + { 0.254395, 0.385445 }, + { -0.139177, 0.571074 }, + { -0.453510, 0.962140 }, + { 0.482684, 0.346190 }, + { 0.889741, 0.724799 }, + { -0.661047, -0.137344 }, + { -0.193311, -0.313475 }, + { 0.363177, -0.960291 }, + { -0.225866, -0.654962 }, + { 0.407875, 0.431522 }, + { -0.543008, -0.992827 }, + { -0.878493, -0.896999 }, + { -0.641776, 0.130757 }, + { -0.785279, -0.015190 }, + { 0.469054, 0.248633 }, + { -0.820410, -0.562833 }, + { 0.174019, -0.618069 }, + { -0.906449, -0.275099 }, + { -0.655285, -0.956021 }, + { 0.453776, -0.085425 }, + { -0.430788, -0.089530 }, + { -0.587370, -0.851826 }, + { 0.149056, -0.474322 }, + { 0.228684, 0.321661 }, + { -0.668752, -0.829400 }, + { -0.729554, 0.438250 }, + { -0.467018, -0.252882 }, + { 0.090398, 0.618760 }, + { 0.741840, 0.516401 }, + { -0.983891, 0.248701 }, + { -0.162010, -0.714455 }, + { 0.308825, 0.787175 } +}; + +float shadowMapTexelSize < string UIWidget = "None"; > = { 0.00195313 }; // (1.0f / 512) + +// Shadows: +// Percentage-Closer Filtering +float3 lightShadow(float4x4 LightViewPrj, uniform Texture2D ShadowMapTexture, float3 VertexWorldPosition, float2 screenCoord, float skinRadius, float2 size) { + float4 dither = 2.0 * DitherTexture.SampleLevel(SamplerAnisoWrap, screenCoord.xy * size / 128, 0) - 1.0; + float2x2 rotationMatrix = float2x2(dither.x, dither.y, -dither.y, dither.x); + + float ditherShadow = 0; + float shadowColored = 0; + + float4 Pndc = mul(float4(VertexWorldPosition.xyz, 1.0), LightViewPrj); + Pndc.xyz /= Pndc.w; + + if (Pndc.x > -1.0f && Pndc.x < 1.0f && Pndc.y > -1.0f && Pndc.y < 1.0f && Pndc.z > 0.0f && Pndc.z < 1.0f) { + float2 uv = 0.5f * Pndc.xy + 0.5f; + uv = float2(uv.x, (1.0 - uv.y)); // maya flip Y + float z = Pndc.z - shadowDepthBias / Pndc.w; + + screenCoord.y = 1 - screenCoord.y; + + float shadowDepth = skinRadius; + shadowDepth *= 4.0; + + for (int i = 0; i < 32; ++i) { + float2 offset = kernelRandom[i] * shadowDepth * shadowMapTexelSize; + float2 ditherOffset = mul(offset, rotationMatrix); + ditherOffset = lerp(offset, ditherOffset, shadowDither); + float3 sample = z - ShadowMapTexture.SampleLevel(SamplerShadowDepth, uv + ditherOffset, 0).x; + + ditherShadow += (sample >= 0.0f) ? 0.0f : (1.0f / 32); + } + } + + return ditherShadow; +} + +float3 lightShadowSkin(float4x4 LightViewPrj, uniform Texture2D ShadowMapTexture, float3 VertexWorldPosition, float2 screenCoord, float skinRadius, float2 size, float2 dir) { + + float4 dither = 2.0 * DitherTexture.SampleLevel(SamplerAnisoWrap, screenCoord.xy * size / 128, 0) - 1.0; + float2x2 rotationMatrix = float2x2(dither.x, dither.y, -dither.y, dither.x); + + float ditherShadow = 0; + float3 shadowColored = float3(0, 0, 0); + + float4 Pndc = mul(float4(VertexWorldPosition.xyz, 1.0), LightViewPrj); + Pndc.xyz /= Pndc.w; + if (Pndc.x > -1.0f && Pndc.x < 1.0f && Pndc.y > -1.0f && Pndc.y < 1.0f && Pndc.z > 0.0f && Pndc.z < 1.0f) { + float2 uv = 0.5f * Pndc.xy + 0.5f; + uv = float2(uv.x, (1.0 - uv.y)); // maya flip Y + + float z = Pndc.z - shadowDepthBias / Pndc.w; + screenCoord.y = 1 - screenCoord.y; + + float shadowDepth = skinRadius; + shadowDepth *= 4.0; + + for (int i = 0; i < 25; ++i) { + float2 offset = kernel[i].a * dir * shadowDepth * shadowMapTexelSize; + offset = mul(offset, rotationMatrix); + float3 sample = z - ShadowMapTexture.SampleLevel(SamplerShadowDepth, uv + offset, 0).x; + ditherShadow = (sample >= 0.0f) ? 0.0f : 1.0f; + + shadowColored += ditherShadow * kernel[i].rgb; + } + } + + return shadowColored; +} + +#ifdef _SUPPORTTESSELLATION_ +// Pick dominant for crack free displacement (original function by Bryan Dudash, modified to support any float3) +float3 PickDominant(float3 vec, // vector to change + float U, float V, float W, // barycoords + float3 DE0A, float3 DE0B, // domimant edge 0 vertex A and B + float3 DE1A, float3 DE1B, // domimant edge 1 vertex A and B + float3 DE2A, float3 DE2B, // domimant edge 2 vertex A and B + float3 DV0, float3 DV1, float3 DV2) { // dominant corners + // Override the texture coordinates along the primitive edges and at the corners. + // Keep the original interpolated coords for the inner area of the primitive. + + float3 dominantVector = vec; + + float edgeThreshold = 0.0001f; + float edgeU = (U == 0) ? 1 : 0; + float edgeV = (V == 0) ? 1 : 0; + float edgeW = (W == 0) ? 1 : 0; + + float corner = ((edgeU + edgeV + edgeW) == 2) ? 1 : 0; // two are 0, means we are a corner + float edge = ((edgeU + edgeV + edgeW) == 1) ? 1 : 0; // one of them is 0, means we are an edge + float innerarea = ((edgeU + edgeV + edgeW) == 0) ? 1 : 0; // none are 0, means we are interior + + if (innerarea != 1) { + // Note: the order of the vertices/edges we choose here can be different per application + // and depend on how the index buffer was generated. + // These work for Maya with its PN-AEN18 primitive generator + if (corner) { + if (U > 1.0 - edgeThreshold) + dominantVector = DV1; + else if (V > 1.0 - edgeThreshold) + dominantVector = DV2; + else if (W > 1.0 - edgeThreshold) + dominantVector = DV0; + } else { + if (edgeU) + dominantVector = lerp(DE2A, DE2B, W); + else if (edgeV) + dominantVector = lerp(DE0A, DE0B, U); + else + dominantVector = lerp(DE1A, DE1B, V); + } + } + + return dominantVector; +} + +// outside of view? +float IsClipped(float4 clipPos) { + float W = clipPos.w + DisplacementClippingBias; // bias allows artist to control to early clipping due to displacement + // Test whether the position is entirely inside the view frustum. + return (-W <= clipPos.x && clipPos.x <= W && -W <= clipPos.y && clipPos.y <= W && -W <= clipPos.z && clipPos.z <= W) ? 0.0f : 1.0f; +} + +// Compute whether all three control points along the edge are outside of the view frustum. +// By doing this, we're ensuring that +// 1.0 means clipped, 0.0 means unclipped. +float ComputeClipping(float3 cpA, float3 cpB, float3 cpC) { + // Compute the projected position for each position, then check to see whether they are clipped. + float4 projPosA = mul(float4(cpA, 1), viewPrj), projPosB = mul(float4(cpB, 1), viewPrj), projPosC = mul(float4(cpC, 1), viewPrj); + return min(min(IsClipped(projPosA), IsClipped(projPosB)), IsClipped(projPosC)); +} + +// PN Triangles and PN-AEN control points: +float3 ComputeCP(float3 posA, float3 posB, float3 normA) { + return (2.0f * posA + posB - (dot((posB - posA), normA) * normA)) / 3.0f; +} +#endif + +// Clip pixel away when opacity mask is used +void OpacityMaskClip(float2 uv) { + if (UseOpacityMaskTexture) { + float OpacityMaskMap = OpacityMaskTexture.Sample(SamplerAnisoWrap, uv).x; + + // clip value when less then 0 for punch-through alpha. + clip(OpacityMaskMap < OpacityMaskBias ? -1 : 1); + } +} + + +// Calculate a light: +struct lightOut { + float Specular; + float3 Color; +}; + +lightOut CalculateLight(bool lightEnable, int lightType, float lightAtten, float3 lightPos, float3 vertWorldPos, + float3 lightColor, float lightIntensity, float3 lightDir, float lightConeAngle, float lightFallOff, float4x4 lightViewPrjMatrix, + uniform Texture2D lightShadowMap, bool lightShadowOn, float3 vertexNormal, float3 normal, float3 diffuseColorIn, + float3 eyeVec, float roughness, float3 specularColorIn, float3 thickness, float softenMask, + float gammaCorrection, float opacity, float3 ambientOcclusion, float3 skinOcclusion, float2 screenCoord, float2 size, float scatteringRadius) { + lightOut OUT = (lightOut)0; + + OUT.Specular = 0.0; + OUT.Color = float3(0, 0, 0); + + if (lightEnable) { + // For Maya, flip the lightDir: +#ifdef _MAYA_ + lightDir = -lightDir; +#endif + + bool isAmbientLight = (lightType == 5); + if (isAmbientLight) { + OUT.Color = diffuseColorIn * lightColor * lightIntensity; + OUT.Color.rgb *= ambientOcclusion; + return OUT; + } + + bool isDirectionalLight = (lightType == 4); + float3 lightVec = lerp(lightPos - vertWorldPos, lightDir, isDirectionalLight); + + float3 L = normalize(lightVec); + + // Diffuse: + float3 diffuseDirect = float3(0, 0, 0); + float3 scatter = float3(skinCoeffX, skinCoeffY, skinCoeffZ); + diffuseDirect = PennerSkin(scatter, normal, L, vertexNormal, 1 - (scatteringRadius*skinScattering)) * diffuseColorIn; + //diffuseDirect = PennerSkinNoLUT(scatter,normal,L, vertexNormal) * diffuseColorIn; + + // Specular: + float3 specularDirect = float3(0, 0, 0); + + float3 Lobe1 = KelemenSzirmaykalos(normal, L, eyeVec, roughness, specularColorIn); + float3 Lobe2 = KelemenSzirmaykalos(normal, L, eyeVec, roughness*0.5, specularColorIn); + + specularDirect = Lobe2 * LobeMix + Lobe1 * (1 - LobeMix); + + // Light Attenuation: + bool enableAttenuation = lightAtten > 0.0001f; + float attenuation = 1.0f; + if (!isDirectionalLight) { + attenuation = lerp(1.0, 1 / pow(length(lightVec), lightAtten), enableAttenuation); + } + + // Spot light Cone Angle: + float angle = 1; + if (lightType == 2) { + angle = lightConeangle(lightConeAngle, lightFallOff, lightVec, lightDir); + } + + // Shadows: + float shadow = 1; + float3 skinShadow = float3(1, 1, 1); + float3 softShadow = float3(1, 1, 1); + if (UseShadows && lightShadowOn) { + shadow = lightShadow(lightViewPrjMatrix, lightShadowMap, vertWorldPos, screenCoord, shadowBlur, size); + + skinShadow = LutTexture.Sample(SamplerAnisoClamp, float2(shadow * angle, 1 - shadowScattering)); + skinShadow = lerp(dot(float3(0.33, 0.59, 0.11), skinShadow), skinShadow, shadowSaturation); + skinShadow = lerp(skinShadow, 1, (shadow* angle)*(shadow* angle)*(shadow* angle)); + } + + float3 lightAttenuation = lightIntensity * angle * attenuation * lightColor; + + diffuseDirect *= lightIntensity * skinShadow * attenuation * lightColor; + specularDirect *= lightAttenuation * shadow; + + float3 backScattering = float3(0, 0, 0); + if (UseTranslucency) { + half backRoughness = (1 - skinScatteringRoughness) * 128; + float3 viewScattering = exp2(saturate(dot(eyeVec, -(L + (normal * 0.01)))) * backRoughness - backRoughness) * skinScatteringAmount; + float3 lightScattering = saturate(dot(-L, normal)*0.5 + 0.5) * skinAmbientScatteringAmount; + + //float3 IBLScattering = diffuseIBL; + backScattering = (viewScattering + lightScattering) * lightAttenuation * shadow * thickness; + + float3 profile = skinScatteringOuterColor * backScattering; + backScattering = profile * skinScatteringAmount; + + + /*float scale = 2e4 * (1.0 - skinScatteringAmount) / backRoughness; + + float4 shrinkedPos = float4(vertWorldPos - 0.005 * vertexNormal, 1.0); + + float4 shadowPosition = mul(shrinkedPos, lightViewPrjMatrix); + + float d1 = lightShadowMap.Sample(SamplerShadowDepth, shadowPosition.xy / shadowPosition.w); // 'd1' has a range of 0..1 + + float d2 = shadowPosition.z; // 'd2' has a range of 0..'lightFarPlane' + d1 *= skinScatteringPlane*shadowPosition.w; // So we scale 'd1' accordingly: + float d = scale * abs(d1 - d2); + + float dd = -d * d; + float3 profile = float3(0.233, 0.455, 0.649) * exp(dd / 0.0064) + + float3(0.1, 0.336, 0.344) * exp(dd / 0.0484) + + float3(0.118, 0.198, 0.0) * exp(dd / 0.187) + + float3(0.113, 0.007, 0.007) * exp(dd / 0.567) + + float3(0.358, 0.004, 0.0) * exp(dd / 1.99) + + float3(0.078, 0.0, 0.0) * exp(dd / 7.41); + backScattering = profile * saturate((0.3 + dot(L, -vertexNormal)) / 1.3) * thickness * diffuseColorIn; */ + } + + OUT.Color += diffuseDirect * skinOcclusion; + OUT.Color *= opacity; + OUT.Color += specularDirect * ambientOcclusion + backScattering; + + // Output specular and rim for opacity: + // OUT.Specular = dot(saturate(specularColor), float3(0.3f, 0.6f, 0.1f)); + } // end if light enabled + + return OUT; +} + +//------------------------------------ +// vertex shader with tessellation +//------------------------------------ +// take inputs from 3d-app +// vertex animation/skinning would happen here +SHADERDATA vt(APPDATA IN) { + SHADERDATA OUT = (SHADERDATA)0; + + // we pass vertices in world space + float4 worldPos = mul(float4(IN.position, 1), world); + OUT.worldPosition.xyz = worldPos.xyz; + +#ifdef _SUPPORTTESSELLATION_ + OUT.position = worldPos; +#else + OUT.position = float4(IN.position.xyz, 1); +#endif + + OUT.screenCoord = mul(float4(OUT.position.xyz, 1), viewPrj); + + // Pass through texture coordinates + // flip Y for Maya +#ifdef _MAYA_ + OUT.texCoord0 = float2(IN.texCoord0.x, (1.0 - IN.texCoord0.y)); + OUT.texCoord1 = float2(IN.texCoord1.x, (1.0 - IN.texCoord1.y)); + OUT.texCoord2 = float2(IN.texCoord2.x, (1.0 - IN.texCoord2.y)); +#else + OUT.texCoord0 = IN.texCoord0; + OUT.texCoord1 = IN.texCoord1; + OUT.texCoord2 = IN.texCoord2; +#endif + + // output normals in world space: + if (!SupportNonUniformScale) { + OUT.worldNormal = normalize(mul(IN.normal, (float3x3)world)); + } else { + OUT.worldNormal = normalize(mul(IN.normal, (float3x3)worldIT)); + } + + // output tangent in world space: + if (!SupportNonUniformScale) { + OUT.worldTangent.xyz = normalize(mul(IN.tangent, (float3x3)world)); + } else { + OUT.worldTangent.xyz = normalize(mul(IN.tangent, (float3x3)worldIT)); + } + + // store direction for normal map: + OUT.worldTangent.w = 1; + if (dot(cross(IN.normal.xyz, IN.tangent.xyz), IN.binormal.xyz) < 0.0) { + OUT.worldTangent.w = -1; + } + + return OUT; +} + + +//------------------------------------ +// vertex shader without tessellation +//------------------------------------ +SHADERDATA v(APPDATA IN) { + SHADERDATA OUT = vt(IN); + + // If we don't use tessellation, pass vertices in clip space: +#ifdef _SUPPORTTESSELLATION_ + OUT.position = mul(float4(OUT.position.xyz, 1), viewPrj); +#else + OUT.position = mul(float4(IN.position, 1), wvp); +#endif + + return OUT; +} + +#ifdef _SUPPORTTESSELLATION_ +//------------------------------------ +// hull shader +//------------------------------------ +// executed once per control point. +// control points can be considered the original vertices of the mesh +// outputs a control point +// run parallel with hull constant function +[domain("tri")] +[partitioning("fractional_odd")] +[outputtopology("triangle_cw")] +[patchconstantfunc("HS_Constant")] +[outputcontrolpoints(3)] +[maxtessfactor(64.0)] + +// PN-AEN without displacement fix: +// SHADERDATA HS( InputPatch IN, uint index : SV_OutputControlPointID, uint patchID : SV_PrimitiveID ) + +// PN Triangles, no crack fixes: +// SHADERDATA HS( InputPatch IN, uint index : SV_OutputControlPointID, uint patchID : SV_PrimitiveID ) + + +// PN-AEN and displacement fix +// the index buffer is made up as follows: +// the triangle vertices index (int3) // PNAEN9 and PNAEN18 +// the 3 adjacent edges vertices index (3 * int2) // PNAEN9 and PNAEN18 +// the 3 dominant edges vertices index (3 * int2) // PNAEN18 +// the dominant position vertices index (int3) // PNAEN18 +SHADERDATA HS(InputPatch IN, uint index : SV_OutputControlPointID, uint patchID : SV_PrimitiveID) { + SHADERDATA OUT = (SHADERDATA)0; + + // copy everything first: + OUT = IN[index]; + + // Compute the next output control point ID so we know which edge we're on. + const uint nextIndex = index < 2 ? index + 1 : 0; // (index + 1) % 3 + + // PN-AEN 9 and 18: + const uint neighborIndex = 3 + 2 * index; + const uint neighborNextIndex = neighborIndex + 1; + float3 myCP, neighborCP; + + // Calculate original PN control points and neighbors'. Then average. + myCP = ComputeCP(IN[index].worldPosition, IN[nextIndex].worldPosition, IN[index].worldNormal); + neighborCP = ComputeCP(IN[neighborIndex].worldPosition, IN[neighborNextIndex].worldPosition, IN[neighborIndex].worldNormal); + OUT.CP1 = (myCP + neighborCP) / 2; + + myCP = ComputeCP(IN[nextIndex].worldPosition, IN[index].worldPosition, IN[nextIndex].worldNormal); + neighborCP = ComputeCP(IN[neighborNextIndex].worldPosition, IN[neighborIndex].worldPosition, IN[neighborNextIndex].worldNormal); + OUT.CP2 = (myCP + neighborCP) / 2; + + // PN Triangles only would be: + // OUT.CP1 = ComputeCP( IN[index].worldPosition, IN[nextIndex].worldPosition, IN[index].worldNormal); + // OUT.CP2 = ComputeCP( IN[nextIndex].worldPosition, IN[index].worldPosition, IN[nextIndex].worldNormal); + + // Clipping: + OUT.clipped = ComputeClipping(OUT.worldPosition, OUT.CP1, OUT.CP2); + + // PN-AEN discontinuity code for displacement UVs: + const uint dominantEdgeIndex = 9 + 2 * index; + const uint dominantEdgeNextIndex = dominantEdgeIndex + 1; + const uint dominantVertexIndex = 15 + index; + + // Note: the order of the vertices/edges we choose here can be different per application and + // depend on how the index buffer was generated. + // These work for Maya with its PN-AEN18 primitive generator + float2 dominantEdgeUV = pickTexcoord(DisplacementTexcoord, IN[dominantEdgeIndex].texCoord0, IN[dominantEdgeIndex].texCoord1, IN[dominantEdgeIndex].texCoord2); + float2 dominantEdgeNextUV = pickTexcoord(DisplacementTexcoord, IN[dominantEdgeNextIndex].texCoord0, IN[dominantEdgeNextIndex].texCoord1, IN[dominantEdgeNextIndex].texCoord2); + float2 dominantVertexUV = pickTexcoord(DisplacementTexcoord, IN[dominantVertexIndex].texCoord0, IN[dominantVertexIndex].texCoord1, IN[dominantVertexIndex].texCoord2); + + OUT.dominantEdge = float4(dominantEdgeNextUV, dominantEdgeUV); + OUT.dominantVertex = dominantVertexUV; + + // VDM dominant normal and tangent for displacement crack fix: + OUT.dominantNormalE0 = IN[dominantEdgeNextIndex].worldNormal.xyz; + OUT.dominantNormalE1 = IN[dominantEdgeIndex].worldNormal.xyz; + OUT.dominantNormalCorner = IN[dominantVertexIndex].worldNormal.xyz; + + OUT.dominantTangentE0 = IN[dominantEdgeNextIndex].worldTangent.xyz; + OUT.dominantTangentE1 = IN[dominantEdgeIndex].worldTangent.xyz; + OUT.dominantTangentCorner = IN[dominantVertexIndex].worldTangent.xyz; + + return OUT; +} + +//------------------------------------ +// Hull shader constant function +//------------------------------------ +// executed once per patch +// outputs user defined data per patch and tessellation factor +// calculates control points for vertex and normal and passes to domain +// This hull shader passes the tessellation factors through to the HW tessellator, +// run parallel with hull function +HSCONSTANTDATA HS_Constant(const OutputPatch IN, uint patchID : SV_PrimitiveID) { + HSCONSTANTDATA OUT = (HSCONSTANTDATA)0; + + // future todo: + // triangle is on silhouette? + // triangle is facing camera? If facing backwards, reduce tessellation + // triangle lies in high frequency area of displacement map (density-based tessellation)? + + // Now setup the PNTriangle control points... + // Center control point + float3 f3E = (IN[0].CP1 + IN[0].CP2 + IN[1].CP1 + IN[1].CP2 + IN[2].CP1 + IN[2].CP2) / 6.0f; + float3 f3V = (IN[0].worldPosition + IN[1].worldPosition + IN[2].worldPosition) / 3.0f; + OUT.CPCenter = f3E + ((f3E - f3V) / 2.0f); + + // Clipping: + float4 centerViewPos = mul(float4(OUT.CPCenter, 1), viewPrj); + bool centerClipped = IsClipped(centerViewPos); + + if (IN[0].clipped && IN[1].clipped && IN[2].clipped && centerClipped) { + // If all control points are clipped, the surface cannot possibly be visible. + // Not entirely true, because displacement mapping can make them visible in the domain shader + // so we provide the user with a bias factor to avoid clipping too early + OUT.TessFactor[0] = OUT.TessFactor[1] = OUT.TessFactor[2] = 0; + } else { + // Camera based tessellation, per object. So very basic. + float3 CameraPosition = viewInv[3].xyz; + float LengthOp = length((CameraPosition - world[3].xyz)); + float DivOp = (TessellationRange / LengthOp); + float MaxOp = max(TessellationMin + DivOp, 1); + OUT.TessFactor[0] = OUT.TessFactor[1] = OUT.TessFactor[2] = MaxOp; + } + + // Inside tess factor is just the average of the edge factors + OUT.InsideTessFactor = (OUT.TessFactor[0] + OUT.TessFactor[1] + OUT.TessFactor[2]) / 3.0f; + + return OUT; +} + +//------------------------------------ +// domain shader +//------------------------------------ +// outputs the new vertices based on previous tessellation. +// also calculates new normals and uvs +// This domain shader applies contol point weighting to the barycentric coords produced by the FF tessellator +// If you wanted to do any vertex lighting, it would have to happen here. +[domain("tri")] +SHADERDATA DS(HSCONSTANTDATA HSIN, OutputPatch IN, float3 f3BarycentricCoords : SV_DomainLocation) { + SHADERDATA OUT = (SHADERDATA)0; + + // The barycentric coordinates + float fU = f3BarycentricCoords.x; + float fV = f3BarycentricCoords.y; + float fW = f3BarycentricCoords.z; + + // Precompute squares and squares * 3 + float fUU = fU * fU; + float fVV = fV * fV; + float fWW = fW * fW; + float fUU3 = fUU * 3.0f; + float fVV3 = fVV * 3.0f; + float fWW3 = fWW * 3.0f; + + // PN position: + float3 position = IN[0].worldPosition * fWW * fW + + IN[1].worldPosition * fUU * fU + + IN[2].worldPosition * fVV * fV + + IN[0].CP1 * fWW3 * fU + + IN[0].CP2 * fW * fUU3 + + IN[2].CP2 * fWW3 * fV + + IN[1].CP1 * fUU3 * fV + + IN[2].CP1 * fW * fVV3 + + IN[1].CP2 * fU * fVV3 + + HSIN.CPCenter * 6.0f * fW * fU * fV; + + // Flat position: + float3 flatPosition = IN[0].worldPosition * fW + IN[1].worldPosition * fU + IN[2].worldPosition * fV; + + // allow user to blend between PN tessellation and flat tessellation: + position = lerp(position, flatPosition, FlatTessellation); + + // Interpolate normal + float3 normal = IN[0].worldNormal * fW + IN[1].worldNormal * fU + IN[2].worldNormal * fV; + + // Normalize the interpolated normal + OUT.worldNormal = normalize(normal); + + // Compute tangent: + float3 tangent = IN[0].worldTangent.xyz * fW + IN[1].worldTangent.xyz * fU + IN[2].worldTangent.xyz * fV; + OUT.worldTangent.xyz = normalize(tangent.xyz); + + // Pass through the direction of the binormal as calculated in the vertex shader + OUT.worldTangent.w = IN[0].worldTangent.w; + + // Linear interpolate the texture coords + OUT.texCoord0 = IN[0].texCoord0 * fW + IN[1].texCoord0 * fU + IN[2].texCoord0 * fV; + OUT.texCoord1 = IN[0].texCoord1 * fW + IN[1].texCoord1 * fU + IN[2].texCoord1 * fV; + OUT.texCoord2 = IN[0].texCoord2 * fW + IN[1].texCoord2 * fU + IN[2].texCoord2 * fV; + + // apply displacement map (only when not rendering the Maya preview swatch): + if (UseDisplacementMap && !IsSwatchRender) { + // Fix Displacement Seams. + // we assume here that the displacement UVs is UVset 0. + // if this UVset index is changed, it should als be changed in the hull shader + // PN-AEN 18 with displacement UV seam fix + float2 displaceUV = pickTexcoord(DisplacementTexcoord, OUT.texCoord0, OUT.texCoord1, OUT.texCoord2); + float3 displacementUVW = PickDominant(float3(displaceUV, 0), fU, fV, fW, + float3(IN[0].dominantEdge.xy, 0), float3(IN[0].dominantEdge.zw, 0), + float3(IN[1].dominantEdge.xy, 0), float3(IN[1].dominantEdge.zw, 0), + float3(IN[2].dominantEdge.xy, 0), float3(IN[2].dominantEdge.zw, 0), + float3(IN[0].dominantVertex.xy, 0), + float3(IN[1].dominantVertex.xy, 0), + float3(IN[2].dominantVertex.xy, 0)); + + // We can still get cracks here because the world tangent and normal may be different for vertices on each side of the UV seam, + // because we do the tangent to world conversion, we get the same diplacement amount, but it results in different movement once converted to world space. + // And even a tiny difference between normal or tangent will cause large cracks. + float3 displacementNormal = PickDominant(OUT.worldNormal, + fU, fV, fW, + IN[0].dominantNormalE0, IN[0].dominantNormalE1, + IN[1].dominantNormalE0, IN[1].dominantNormalE1, + IN[2].dominantNormalE0, IN[2].dominantNormalE1, + IN[0].dominantNormalCorner, + IN[1].dominantNormalCorner, + IN[2].dominantNormalCorner); + + displacementNormal = normalize(displacementNormal); + + if (DisplacementModel == 1) { // Tangent Vector Displacement + float3 displacementTangent = PickDominant(OUT.worldTangent.xyz, fU, fV, fW, + IN[0].dominantTangentE0, IN[0].dominantTangentE1, + IN[1].dominantTangentE0, IN[1].dominantTangentE1, + IN[2].dominantTangentE0, IN[2].dominantTangentE1, + IN[0].dominantTangentCorner, + IN[1].dominantTangentCorner, + IN[2].dominantTangentCorner); + + displacementTangent = normalize(displacementTangent); + + float3 vecDisp = DisplacementTexture.SampleLevel(SamplerAnisoWrap, displacementUVW.xy, 0).xyz; + vecDisp -= DisplacementOffset; + + float3 Bn = cross(displacementNormal, displacementTangent); + float3x3 toWorld = float3x3(displacementTangent, Bn.xyz, displacementNormal); + + float3 VDMcoordSys = vecDisp.xzy; // Mudbox + if (VectorDisplacementCoordSys == 1) { + VDMcoordSys = vecDisp.xyz; // Maya or ZBrush + } + + float3 vecDispW = mul(VDMcoordSys, toWorld) * DisplacementHeight; + position.xyz += vecDispW; + } else { + // offset (-0.5) so that we can have negative displacement also + float offset = DisplacementTexture.SampleLevel(SamplerAnisoWrap, displacementUVW.xy, 0).x - DisplacementOffset; + position.xyz += displacementNormal * offset * DisplacementHeight; + } + } + + // Update World Position value for inside pixel shader: + OUT.worldPosition = position.xyz; + + // Transform model position with view-projection matrix + //OUT.position = float4(position.xyz, 1); // with geo + OUT.position = mul(float4(position.xyz, 1), viewPrj); // without geo + + return OUT; +} + +//------------------------------------ +// Geometry Shader +//------------------------------------ +// This is a sample Geo shader. Disabled in this shader, but left here for your reference. +// If you wish to enable it, search for 'with geo' in this shader for code to change. +[maxvertexcount(3)] // Declaration for the maximum number of vertices to create +void GS(triangle SHADERDATA IN[3], inout TriangleStream TriStream) { + SHADERDATA OUT; + + // quick test to see if geo also works: + for (int i = 0; i<3; ++i) { + OUT = IN[i]; + OUT.position = mul(mul(float4(OUT.position.xyz, 1), view), prj); + TriStream.Append(OUT); + } + TriStream.RestartStrip(); // end triangle +} +#endif + +void sampleMasks() { + +} + +//------------------------------------ +// pixel shader +//------------------------------------ +float4 f(SHADERDATA IN, bool FrontFace : SV_IsFrontFace) : SV_Target { +#ifdef _3DSMAX_ + FrontFace = !FrontFace; +#endif + // clip are early as possible + float2 opacityMaskUV = pickTexcoord(OpacityMaskTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + OpacityMaskClip(opacityMaskUV); + + float gammaCorrection = lerp(1.0, 2.2, LinearSpaceLighting); + + float3 N = normalize(IN.worldNormal.xyz); + if (flipBackfaceNormals) { + N = lerp(-N, N, FrontFace); + } + float3 Nw = N; + + // Tangent and BiNormal: + float3 T = normalize(IN.worldTangent.xyz); + float3 Bn = cross(N, T); + Bn *= IN.worldTangent.w; + + float4 diffuse = float4(1, 1, 1, 1); + if (UseDiffuseTexture) { + float2 diffuseUV = pickTexcoord(DiffuseTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float4 diffuseTextureSample = DiffuseTexture.Sample(SamplerAnisoWrap, diffuseUV); + + if (UseDiffuseTextureAlpha) { + diffuse.a = diffuseTextureSample.a; + } + + diffuse.rgb *= pow(diffuseTextureSample.rgb, gammaCorrection); + } + + float3 microNormal = float3(0, 0, 1); + if (UseNormalTexture) { + float3x3 toWorld = float3x3(T, Bn, N); + + float2 normalUV = pickTexcoord(NormalTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float3 NormalMap = NormalTexture.Sample(SamplerAnisoWrap, normalUV).xyz * 2.0 - 1.0; + float3 backupNormal = NormalMap; + + if (NormalCoordsysX > 0) + NormalMap.x = -NormalMap.x; + if (NormalCoordsysY > 0) + NormalMap.y = -NormalMap.y; + + NormalMap.xy *= NormalHeight; + + if (UseMicroNormalTexture) { + float2 normalUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + microNormal = MicroNormalTexture.Sample(SamplerAnisoWrap, normalUV * MicroScale).xyz * 2.0 - 1.0; + + microNormal.xy *= MicroNormalHeight; + NormalMap.xy += microNormal.xy; + } + + if (UseBlendTexture) { + float2 blendUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + + + + + + + } + NormalMap = mul(NormalMap.xyz, toWorld); + N = normalize(NormalMap); + } else { + if (UseMicroNormalTexture) { + float3x3 toWorld = float3x3(T, Bn, N); + + float2 normalUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + microNormal = MicroNormalTexture.Sample(SamplerAnisoWrap, normalUV * MicroScale).xyz * 2.0 - 1.0; + + microNormal.xy *= MicroNormalHeight; + microNormal = mul(microNormal.xyz, toWorld); + } + } + + diffuse.rgb *= DiffuseColor; + + float3 blurredNormal = lerp(N, Nw, NormalBlurring); + + float3 V = normalize(viewInv[3].xyz - IN.worldPosition.xyz); + + float4 specular = float4(0.028, 0.028, 0.028, 1); + specular.rgb *= SpecularColor; + + if (UseSpecularTexture) { + float2 opacityUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float4 SpecularTextureSample = SpecularTexture.Sample(SamplerAnisoWrap, opacityUV); + + specular.rgb *= pow(SpecularTextureSample.rgb, gammaCorrection); + + if (UseSpecularTextureAlpha) { + specular.a = SpecularTextureSample.a; + } + } + + float cavity = 1; + if (UseCavityTexture) { + float2 cavityUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float CavityTextureSample = CavityTexture.Sample(SamplerAnisoWrap, cavityUV); + + cavity = lerp(1, pow(CavityTextureSample, gammaCorrection), CavityAmount); + } + + float microCavity = 1; + if (UseMicroCavityTexture) { + float2 cavityUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float MicroCavityTextureSample = MicroCavityTexture.Sample(SamplerAnisoWrap, cavityUV * MicroScale); + + microCavity = lerp(1, pow(MicroCavityTextureSample, gammaCorrection), MicroCavityAmount); + } + + specular.rgb *= cavity * microCavity; // We apply cavity on the specular before it is sent to the fresnel + + float roughness = Roughness; + if (UseSpecularTextureAlpha) { + roughness *= specular.a; + } + + float scatteringRadius = 1; + if (UseScatteringRadiusTexture) { + float2 scatteringUV = pickTexcoord(DiffuseTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float4 scatteringRadiusTextureSample = ScatteringRadiusTexture.Sample(SamplerAnisoWrap, scatteringUV); + + scatteringRadius *= pow(scatteringRadiusTextureSample, gammaCorrection); + } + + // Opacity: + float opacity = saturate(diffuse.a * Opacity); + + // Occlusion: + float3 ambientOcclusion = float3(1, 1, 1); + if (UseAmbientOcclusionTexture) { + float2 aomapUV = pickTexcoord(OcclusionTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float3 aomapTextureSample = OcclusionTexture.Sample(SamplerAnisoWrap, aomapUV).rgb; + ambientOcclusion *= lerp(1, pow(aomapTextureSample.rgb, gammaCorrection), OcclusionAmount); + } + + float3 thickness = float3(1, 1, 1); + if (UseThicknessTexture) { + float2 thicknessUV = pickTexcoord(ThicknessTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + thickness = pow(BackScatteringThicknessTexture.Sample(SamplerAnisoWrap, thicknessUV), gammaCorrection).xyz; + } + + float3 skinOcclusion = coloredOcclusion(diffuse, ambientOcclusion); // Colored occlusion for skin + + float softenMask = 1.0f; + + float2 screenCoord = IN.screenCoord.xy / IN.screenCoord.w; + //float2 currentScreenSize = screenSize; // TO DO FIND A WAY TO GET SCREEN SIZE, MAYA BUG ? + float2 currentScreenSize = float2(1024, 512); + + // -------- + // LIGHTS: + // -------- + // future todo: Maya could pass light info in array so we can loop any number of lights. + + // light 0: + lightOut light0 = CalculateLight(light0Enable, light0Type, light0AttenScale, light0Pos, IN.worldPosition.xyz, + light0Color, light0Intensity, light0Dir, light0ConeAngle, light0FallOff, light0Matrix, + light0ShadowMap, light0ShadowOn, blurredNormal, N, diffuse, V, roughness, specular, + thickness, softenMask, gammaCorrection, opacity, ambientOcclusion, skinOcclusion, screenCoord, currentScreenSize, scatteringRadius); + + // light 1: + lightOut light1 = CalculateLight(light1Enable, light1Type, light1AttenScale, light1Pos, IN.worldPosition.xyz, + light1Color, light1Intensity, light1Dir, light1ConeAngle, light1FallOff, light1Matrix, + light1ShadowMap, light1ShadowOn, blurredNormal, N, diffuse, V, roughness, specular, + thickness, softenMask, gammaCorrection, opacity, ambientOcclusion, skinOcclusion, screenCoord, currentScreenSize, scatteringRadius); + + // light 2: + lightOut light2 = CalculateLight(light2Enable, light2Type, light2AttenScale, light2Pos, IN.worldPosition.xyz, + light2Color, light2Intensity, light2Dir, light2ConeAngle, light2FallOff, light2Matrix, + light2ShadowMap, light2ShadowOn, blurredNormal, N, diffuse, V, roughness, specular, + thickness, softenMask, gammaCorrection, opacity, ambientOcclusion, skinOcclusion, screenCoord, currentScreenSize, scatteringRadius); + + float3 lightTotal = light0.Color + light1.Color + light2.Color; + + + // ---------------------- + // IMAGE BASED LIGHTING + // ---------------------- + + // Specular IBL + float3 specularIBL = float3(0, 0, 0); + bool reflectMapUsed = UseSpecCubeIBL; + if (reflectMapUsed) { + int lod = 7; // Hard coded mip map level + + float3 reflectionVector = reflect(-V, N); + + reflectionVector = RotateVectorYaw(reflectionVector, SkyRotation); + reflectionVector = normalize(reflectionVector); + float NdotV = saturate(dot(N, V)); + float3 F = F_LagardeSchlick(specular, 1 - roughness, NdotV); + + specularIBL += SpecularCubeIBL.SampleLevel(CubeMapSampler, reflectionVector, lod * roughness).rgb * F; + } + + // Diffuse IBL + float3 diffuseIBL = float3(0, 0, 0); + bool useDiffuseIBL = UseDiffuseIBLMap; + if (useDiffuseIBL) { + // We use the world normal to sample the lighting texture + float3 diffuseIBLVec_High = N; + float3 diffuseIBLVec_Low = blurredNormal; + + diffuseIBLVec_High = RotateVectorYaw(diffuseIBLVec_High, SkyRotation); + diffuseIBLVec_High = normalize(diffuseIBLVec_High); + + diffuseIBLVec_Low = RotateVectorYaw(diffuseIBLVec_Low, SkyRotation); + diffuseIBLVec_Low = normalize(diffuseIBLVec_Low); + + float3 diffuseIBL_High = DiffuseCubeIBL.SampleLevel(CubeMapSampler, diffuseIBLVec_High, 0).rgb; + float3 diffuseIBL_Low = DiffuseCubeIBL.SampleLevel(CubeMapSampler, diffuseIBLVec_Low, 0).rgb; + + diffuseIBL = diffuseSkinIBL(float3(skinCoeffX, skinCoeffY, skinCoeffZ), diffuseIBL_High, diffuseIBL_Low); + } + + // ---------------------- + // FINAL COLOR AND ALPHA: + // ---------------------- + + float3 result = float3(0, 0, 0); + + result += diffuse * diffuseIBL * DiffuseIBLIntensity * skinOcclusion; + + result += specularIBL * SpecularIBLIntensity * specularOcclusion(N, V, ambientOcclusion); + + result += lightTotal; + + //result = N; + + // do gamma correction in shader: + if (!MayaFullScreenGamma) + result = pow(result, 1 / gammaCorrection); + + // final alpha: + float transparency = opacity; + transparency = saturate(transparency); // keep 0-1 range + + return float4(result, transparency); +} + + +#ifdef _MAYA_ +void Peel(SHADERDATA IN) { + float currZ = abs(mul(float4(IN.worldPosition, 1.0f), view).z); + + float4 Pndc = mul(float4(IN.worldPosition, 1.0f), viewPrj); + float2 UV = Pndc.xy / Pndc.w * float2(0.5f, -0.5f) + 0.5f; + float prevZ = transpDepthTexture.Sample(SamplerShadowDepth, UV).r; + float opaqZ = opaqueDepthTexture.Sample(SamplerShadowDepth, UV).r; + float bias = 0.00002f; + + if (currZ < prevZ * (1.0f + bias) || currZ > opaqZ * (1.0f - bias)) { + discard; + } +} + +float4 LinearDepth(SHADERDATA IN) { + return abs(mul(float4(IN.worldPosition, 1.0f), view).z); +} + +float4 DepthComplexity(float opacity) { + return opacity > 0.001f ? 1.0f : 0.0f; +} + +struct MultiOut2 { + float4 target0 : SV_Target0; + float4 target1 : SV_Target1; +}; + +MultiOut2 fTransparentPeel(SHADERDATA IN, bool FrontFace : SV_IsFrontFace) { + Peel(IN); + + MultiOut2 OUT; + OUT.target0 = f(IN, FrontFace); + OUT.target1 = LinearDepth(IN); + return OUT; +} + +MultiOut2 fTransparentPeelAndAvg(SHADERDATA IN, bool FrontFace : SV_IsFrontFace) { + Peel(IN); + + MultiOut2 OUT; + OUT.target0 = f(IN, FrontFace); + OUT.target1 = DepthComplexity(OUT.target0.w); + return OUT; +} + +MultiOut2 fTransparentWeightedAvg(SHADERDATA IN, bool FrontFace : SV_IsFrontFace) { + MultiOut2 OUT; + OUT.target0 = f(IN, FrontFace); + OUT.target1 = DepthComplexity(OUT.target0.w); + return OUT; +} + +//------------------------------------ +// wireframe pixel shader +//------------------------------------ +float4 fwire(SHADERDATA IN) : SV_Target { + return float4(0, 0, 1, 1); +} + + +//------------------------------------ +// pixel shader for shadow map generation +//------------------------------------ +//float4 ShadowMapPS( float3 Pw, float4x4 shadowViewProj ) +float4 ShadowMapPS(SHADERDATA IN) : SV_Target { + // clip as early as possible + float2 opacityMaskUV = pickTexcoord(OpacityMaskTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + OpacityMaskClip(opacityMaskUV); + + float4 Pndc = mul(float4(IN.worldPosition, 1.0f), viewPrj); + + // divide Z and W component from clip space vertex position to get final depth per pixel + float retZ = Pndc.z / Pndc.w; + + retZ += fwidth(retZ); + return retZ.xxxx; +} +#endif + +//----------------------------------- +// Objects without tessellation +//------------------------------------ +technique11 TessellationOFF < + bool overridesDrawState = false; // we do not supply our own render state settings + int isTransparent = 3; + // objects with clipped pixels need to be flagged as isTransparent to avoid the occluding underlying geometry since Maya renders the object with flat shading when computing depth + string transparencyTest = "Opacity < 1.0 || (UseDiffuseTexture && UseDiffuseTextureAlpha) || UseOpacityMaskTexture"; + // 'VariableNameAsAttributeName = false' can be used to tell Maya's DX11ShaderNode to use the UIName annotation string for the Maya attribute name instead of the shader variable name. + // When changing this option, the attribute names generated for the shader inside Maya will change and this can have the side effect that older scenes have their shader attributes reset to default. + // bool VariableNameAsAttributeName = false; + +#ifdef _MAYA_ + // Tells Maya that the effect supports advanced transparency algorithm, + // otherwise Maya would render the associated objects simply by alpha + // blending on top of other objects supporting advanced transparency + // when the viewport transparency algorithm is set to depth-peeling or + // weighted-average. + bool supportsAdvancedTransparency = true; +#endif +> +{ + pass p0 < string drawContext = "colorPass"; > { // tell maya during what draw context this shader should be active, in this case 'Color' + // even though overrideDrawState is false, we still set the pre-multiplied alpha state here in + // case Maya is using 'Depth Peeling' transparency algorithm + // This unfortunately won't solve sorting issues, but at least our object can draw transparent. + // If we don't set this, the object will always be opaque. + // In the future, hopefully ShaderOverride nodes can participate properly in Maya's Depth Peeling setup +#ifdef _MAYA_ + SetBlendState(PMAlphaBlending, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF); +#endif + SetVertexShader(CompileShader(vs_5_0, v())); + SetHullShader(NULL); + SetDomainShader(NULL); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, f())); + } + +#ifdef _MAYA_ + pass pTransparentPeel < string drawContext = "transparentPeel"; > { // Depth-peeling pass for depth-peeling transparency algorithm. + SetVertexShader(CompileShader(vs_5_0, v())); + SetHullShader(NULL); + SetDomainShader(NULL); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentPeel())); + } + + pass pTransparentPeelAndAvg < string drawContext = "transparentPeelAndAvg"; > { // Weighted-average pass for depth-peeling transparency algorithm. + SetVertexShader(CompileShader(vs_5_0, v())); + SetHullShader(NULL); + SetDomainShader(NULL); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentPeelAndAvg())); + } + + pass pTransparentWeightedAvg < string drawContext = "transparentWeightedAvg"; > { // Weighted-average algorithm. No peeling. + SetVertexShader(CompileShader(vs_5_0, v())); + SetHullShader(NULL); + SetDomainShader(NULL); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentWeightedAvg())); + } + + pass pShadow < string drawContext = "shadowPass"; > { + SetVertexShader(CompileShader(vs_5_0, v())); + SetHullShader(NULL); + SetDomainShader(NULL); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, ShadowMapPS())); + } +#endif +} + +#ifdef _SUPPORTTESSELLATION_ +//----------------------------------- +// Objects with tessellation +//------------------------------------ +// Vertex Index Buffer options: +// index_buffer_type: None; // no divergent normals and no displacement crack fix +// index_buffer_type: PNAEN9; // divergent normals crack fix; no displacement UV seam crack fix +// index_buffer_type: PNAEN18, // crack fix for divergent normals and UV seam displacement +technique11 TessellationON < + string index_buffer_type = "PNAEN18"; // tell Maya what type of index buffer we want. Must be unique name per generator + bool overridesDrawState = false; + int isTransparent = 3; + string transparencyTest = "Opacity < 1.0 || (UseDiffuseTexture && UseDiffuseTextureAlpha) || UseOpacityMaskTexture"; + bool supportsAdvancedTransparency = true; > { + pass p0 < string drawContext = "colorPass"; > { + SetBlendState(PMAlphaBlending, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF); + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); // without geo + //SetGeometryShader( CompileShader(gs_5_0, GS()) ); // with geo + SetPixelShader(CompileShader(ps_5_0, f())); + } + + pass pTransparentPeel < string drawContext = "transparentPeel";> { // Depth-peeling pass for depth-peeling transparency algorithm. + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentPeel())); + } + + pass pTransparentPeelAndAvg < string drawContext = "transparentPeelAndAvg"; > { // Weighted-average pass for depth-peeling transparency algorithm. + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentPeelAndAvg())); + } + + pass pTransparentWeightedAvg < string drawContext = "transparentWeightedAvg"; > { // Weighted-average algorithm. No peeling. + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentWeightedAvg())); + } + + pass pShadow < string drawContext = "shadowPass"; > { + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, ShadowMapPS())); + } +} + +//----------------------------------- +// Wireframe +//------------------------------------ +technique11 WireFrame < + string index_buffer_type = "PNAEN18"; + bool overridesDrawState = false; // since we only change the fillMode, it can remain on false. If we changed the blend state, it would have to be true + int isTransparent = 0; > { + pass p0 < string drawContext = "colorPass"; > { + SetRasterizerState(WireframeCullFront); + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); // without geo + //SetGeometryShader( CompileShader(gs_5_0, GS()) ); // with geo + SetPixelShader(CompileShader(ps_5_0, fwire())); + } +} +#endif diff --git a/data/shaders/dx11_shd_eyeRight.fx b/data/shaders/dx11_shd_eyeRight.fx new file mode 100644 index 0000000..6b74541 --- /dev/null +++ b/data/shaders/dx11_shd_eyeRight.fx @@ -0,0 +1,2872 @@ +// Maya Skin shader made by Charles Greivelding 2014 + +//------------------------------------ +// Notes +//------------------------------------ +// Shader uses 'pre-multiplied alpha' as its render state and this Uber Shader is build to work in unison with that. +// Alternatively, in Maya, the dx11Shader node allows you to set your own render states by supplying the 'overridesDrawState' annotation in the technique +// You may find it harder to get proper transparency sorting if you choose to do so. + +// The technique annotation 'isTransparent' is used to tell Maya how treat the technique with respect to transparency. +// - If set to 0 the technique is always considered opaque +// - If set to 1 the technique is always considered transparent +// - If set to 2 the plugin will check if the parameter marked with the OPACITY semantic is less than 1.0 +// - If set to 3 the plugin will use the transparencyTest annotation to create a MEL procedure to perform the desired test. +// Maya will then render the object twice. Front faces follow by back faces. + +// For some objects you may need to switch the Transparency Algorithm to 'Depth Peeling' to avoid transparency issues. +// Models that require this usually have internal faces. + +//------------------------------------ +// Defines +//------------------------------------ +// how many mip map levels should Maya generate or load per texture. +// 0 means all possible levels +// some textures may override this value, but most textures will follow whatever we have defined here +// If you wish to optimize performance (at the cost of reduced quality), you can set NumberOfMipMaps below to 1 + +#define NumberOfMipMaps 0 +#define PI 3.1415926 +#define _3DSMAX_SPIN_MAX 99999 + +#ifndef _MAYA_ +#define _3DSMAX_ // at time of writing this shader, Nitrous driver did not have the _3DSMAX_ define set +#define _ZUP_ // Maya is Y up, 3dsMax is Z up +#endif + +#ifdef _MAYA_ +#define _SUPPORTTESSELLATION_ // at time of writing this shader, 3dsMax did not support tessellation +#endif + +//------------------------------------ +// State +//------------------------------------ +#ifdef _MAYA_ +RasterizerState WireframeCullFront { + CullMode = Front; + FillMode = WIREFRAME; +}; + +BlendState PMAlphaBlending { + AlphaToCoverageEnable = FALSE; + BlendEnable[0] = TRUE; + SrcBlend = ONE; + DestBlend = INV_SRC_ALPHA; + BlendOp = ADD; + SrcBlendAlpha = ONE; // Required for hardware frame render alpha channel + DestBlendAlpha = INV_SRC_ALPHA; + BlendOpAlpha = ADD; + RenderTargetWriteMask[0] = 0x0F; +}; +#endif + +//------------------------------------ +// Map Channels +//------------------------------------ +#ifdef _3DSMAX_ +int texcoord0 : Texcoord < + int Texcoord = 0; + int MapChannel = 1; + string UIWidget = "None"; +>; + +int texcoord1 : Texcoord < + int Texcoord = 1; + int MapChannel = 2; + string UIWidget = "None"; +>; + +int texcoord2 : Texcoord < + int Texcoord = 2; + int MapChannel = 3; + string UIWidget = "None"; +>; +#endif + +//------------------------------------ +// Samplers +//------------------------------------ +SamplerState CubeMapSampler { + Filter = ANISOTROPIC; + AddressU = Clamp; + AddressV = Clamp; + AddressW = Clamp; +}; + +SamplerState SamplerAnisoWrap { + Filter = ANISOTROPIC; + AddressU = Wrap; + AddressV = Wrap; +}; + +SamplerState SamplerAnisoClamp { + Filter = ANISOTROPIC; + AddressU = Clamp; + AddressV = Clamp; +}; + +SamplerState SamplerShadowDepth { + Filter = MIN_MAG_MIP_POINT; + AddressU = Border; + AddressV = Border; + BorderColor = float4(1.0f, 1.0f, 1.0f, 1.0f); +}; + +//------------------------------------ +// Textures +//------------------------------------ + +Texture2D LutTexture < + string UIGroup = "SubSurfaceScattering"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "SSS LUT Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 203; + int UVEditorOrder = 2; +>; + +Texture2D DitherTexture < + string UIGroup = "SubSurfaceScattering"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "SSS Dither Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 203; + int UVEditorOrder = 2; +>; + +// --------------------------------------------- +// Blend GROUP +// --------------------------------------------- + +bool UseBlendTexture < + string UIGroup = "Wrinkle mixing"; + string UIName = "Enable Wrinkle Mixing"; + int UIOrder = 919; +> = false; + + + + + + +Texture2D OcclusionTexture < + string UIGroup = "Occlusion"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Ambient Occlusion Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 401; + int UVEditorOrder = 2; +>; + +Texture2D ScatteringRadiusTexture < + string UIGroup = "SubSurfaceScattering"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "SSS Radius Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 209; + int UVEditorOrder = 2; +>; + +Texture2D CavityTexture < + string UIGroup = "Cavity"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Cavity Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 501; + int UVEditorOrder = 4; +>; + +Texture2D DiffuseTexture < + string UIGroup = "Diffuse"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Diffuse Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 201; + int UVEditorOrder = 1; +>; + +Texture2D SpecularTexture < + string UIGroup = "Specular"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Specular Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 302; + int UVEditorOrder = 4; +>; + +Texture2D NormalTexture < + string UIGroup = "Normal"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Normal Map"; + string ResourceType = "2D"; + int mipmaplevels = 0; // If mip maps exist in texture, Maya will load them. So user can pre-calculate and re-normalize mip maps for normal maps in .dds + int UIOrder = 601; + int UVEditorOrder = 5; +>; + +Texture2D MicroCavityTexture < + string UIGroup = "Micro Details"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Micro Cavity Map"; + string ResourceType = "2D"; + int mipmaplevels = 0; + int UIOrder = 701; + int UVEditorOrder = 5; +>; + +Texture2D MicroNormalTexture < + string UIGroup = "Micro Details"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Micro Normal Map"; + string ResourceType = "2D"; + int mipmaplevels = 0; + int UIOrder = 704; + int UVEditorOrder = 5; +>; + +#ifdef _SUPPORTTESSELLATION_ +Texture2D DisplacementTexture < + string UIGroup = "Tessellation and Displacement"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Displacement Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 902; + int UVEditorOrder = 8; +>; +#endif + +Texture2D BackScatteringThicknessTexture < + string UIGroup = "BackScattering"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Thickness Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 215; + int UVEditorOrder = 10; +>; + +Texture2D OpacityMaskTexture < + string UIGroup = "Opacity"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Opacity Mask"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 800; + int UVEditorOrder = 12; +>; + +TextureCube DiffuseCubeIBL < + string UIGroup = "IBL Settings"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Diffuse Cubemap"; + string ResourceType = "Cube"; + int mipmaplevels = 0; // Use (or load) max number of mip map levels so we can use blurring + int UIOrder = 108; + int UVEditorOrder = 10; +>; + +TextureCube SpecularCubeIBL : environment < + string UIGroup = "IBL Settings"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Specular Cubemap"; + string ResourceType = "Cube"; + int mipmaplevels = 0; + int UIOrder = 111; + int UVEditorOrder = 6; +>; + +//------------------------------------ +// Shadow Maps +//------------------------------------ +Texture2D light0ShadowMap : SHADOWMAP < + string Object = "Light 0"; // UI Group for lights, auto-closed + string UIWidget = "None"; + int UIOrder = 5010; +>; + +Texture2D light1ShadowMap : SHADOWMAP < + string Object = "Light 1"; + string UIWidget = "None"; + int UIOrder = 5020; +>; + +Texture2D light2ShadowMap : SHADOWMAP < + string Object = "Light 2"; + string UIWidget = "None"; + int UIOrder = 5030; +>; + +//------------------------------------ +// Internal depth textures for Maya depth-peeling transparency +//------------------------------------ +#ifdef _MAYA_ + +Texture2D transpDepthTexture : transpdepthtexture < + string UIWidget = "None"; +>; + +Texture2D opaqueDepthTexture : opaquedepthtexture < + string UIWidget = "None"; +>; + +#endif + +//------------------------------------ +// Per Frame parameters +//------------------------------------ +cbuffer UpdatePerFrame : register(b0) { + float4x4 viewInv : ViewInverse < string UIWidget = "None"; >; + float4x4 view : View < string UIWidget = "None"; >; + float4x4 prj : Projection < string UIWidget = "None"; >; + float4x4 viewPrj : ViewProjection < string UIWidget = "None"; >; + + // A shader may wish to do different actions when Maya is rendering the preview swatch (e.g. disable displacement) + // This value will be true if Maya is rendering the swatch + bool IsSwatchRender : MayaSwatchRender < string UIWidget = "None"; > = false; + float2 screenSize : ViewportPixelSize < string UIWidget = "None"; >; + + // If the user enables viewport gamma correction in Maya's global viewport rendering settings, the shader should not do gamma again + bool MayaFullScreenGamma : MayaGammaCorrection < string UIWidget = "None"; > = false; +} + + +//------------------------------------ +// Per Object parameters +//------------------------------------ +cbuffer UpdatePerObject : register(b1) { + float4x4 world : World < string UIWidget = "None"; >; + float4x4 worldIT : WorldInverseTranspose < string UIWidget = "None"; >; +#ifndef _SUPPORTTESSELLATION_ + float4x4 wvp : WorldViewProjection < string UIWidget = "None"; >; +#endif + +// --------------------------------------------- +// Lighting Settings GROUP +// --------------------------------------------- +bool LinearSpaceLighting < + string UIGroup = "Lighting Settings"; + string UIName = "Linear Space Lighting"; + int UIOrder = 100; +> = true; + +bool UseShadows < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string UIGroup = "Lighting Settings"; + string UIName = "Shadows"; + int UIOrder = 101; +#endif +> = true; + +float shadowMultiplier < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string UIGroup = "Lighting Settings"; + string UIWidget = "Slider"; + float UIMin = 0.000; + float UIMax = 1.000; + float UIStep = 0.001; + string UIName = "Shadow Strength"; + int UIOrder = 102; +#endif +> = { 1.0f }; + +// This offset allows you to fix any in-correct self shadowing caused by limited precision. +// This tends to get affected by scene scale and polygon count of the objects involved. +float shadowDepthBias : ShadowMapBias < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string UIGroup = "Lighting Settings"; + string UIWidget = "Slider"; + float UIMin = 0.000; + float UISoftMax = 10.000; + float UIStep = 0.001; + string UIName = "Shadow Bias"; + int UIOrder = 103; +#endif +> = { 0.01f }; + +// flips back facing normals to improve lighting for things like sheets of hair or leaves +bool flipBackfaceNormals < + string UIGroup = "Lighting Settings"; + string UIName = "Double Sided Lighting"; + int UIOrder = 104; +> = true; + +// -- light props are inserted here via UIOrder 20 - 49 + +// --------------------------------------------- +// IBL Settings GROUP +// --------------------------------------------- + +float SkyRotation < + string UIGroup = "IBL Settings"; + string UIName = "Sky Rotation"; + float UISoftMin = 0; + float UISoftMax = 360; + float UIMin = 0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 1; + int UIOrder = 105; + string UIWidget = "Slider"; +> = { 0.0f }; + +bool UseDiffuseIBLMap < + string UIGroup = "IBL Settings"; + string UIName = "Use Diffuse Cubemap"; + int UIOrder = 106; +> = false; + +float DiffuseIBLIntensity < + string UIGroup = "IBL Settings"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 2.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.001; + string UIName = "Diffuse IBL Intensity"; + int UIOrder = 107; +> = 1.0; + +bool UseSpecCubeIBL < + string UIGroup = "IBL Settings"; + string UIName = "Use Specular Cubemap"; + int UIOrder = 109; +> = false; + +float SpecularIBLIntensity < + string UIGroup = "IBL Settings"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 2.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.001; + string UIName = "Specular IBL Intensity"; + int UIOrder = 110; +> = 1.0; + +// --------------------------------------------- +// Diffuse GROUP +// --------------------------------------------- + +bool UseDiffuseTexture < + string UIGroup = "Diffuse"; + string UIName = "Use Diffuse Map"; + int UIOrder = 200; +> = false; + + +bool UseDiffuseTextureAlpha < + string UIGroup = "Diffuse"; + string UIName = "Use Diffuse Map Alpha"; + int UIOrder = 201; +> = false; + +float3 DiffuseColor : Diffuse < + string UIGroup = "Diffuse"; + string UIName = "Diffuse Color"; + string UIWidget = "ColorPicker"; + int UIOrder = 202; +> = { 1.0f, 1.0f, 1.0f }; + +// --------------------------------------------- +// SSS GROUP +// --------------------------------------------- + +float skinCoeffX < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Coeffient R"; + int UIOrder = 204; +> = 1.0; + +float skinCoeffY < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Coeffient G"; + int UIOrder = 205; +> = 0.5; + +float skinCoeffZ < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Coeffient B"; + int UIOrder = 206; +> = 0.25; + +float NormalBlurring < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Softness"; + int UIOrder = 207; +> = 0.25; + +bool UseScatteringRadiusTexture < + string UIGroup = "SubSurfaceScattering"; + string UIName = "Use SSS Radius Map"; + int UIOrder = 209; +> = false; + +float skinScattering < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Radius"; + int UIOrder = 210; +> = 0.25; + +float shadowBlur < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Shadow Blur"; + int UIOrder = 211; +> = 1.0; + +float shadowDither < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Shadow Dither"; + int UIOrder = 211; +> = 1.0; + +float shadowScattering < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Shadow Scattering"; + int UIOrder = 212; +> = 1.0; + +float shadowSaturation < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 4.0; + float UIMax = 4; + float UIStep = 0.1; + string UIName = "SSS Shadow Saturation"; + int UIOrder = 213; +> = 1.0; + +// --------------------------------------------- +// BackScattering GROUP +// --------------------------------------------- + +bool UseTranslucency < + string UIGroup = "BackScattering"; + string UIName = "Back Scattering"; + int UIOrder = 214; +> = false; + +bool UseThicknessTexture < + string UIGroup = "BackScattering"; + string UIName = "Use Thickness Map"; + int UIOrder = 216; +> = false; + +float skinScatteringRoughness < + string UIGroup = "BackScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "Back Scattering Width"; + int UIOrder = 217; +> = 1.0; + +/*float3 skinScatteringInnerColor < + string UIGroup = "BackScattering"; + string UIName = "Back Scattering Inner Color"; + string UIWidget = "ColorPicker"; + int UIOrder = 215; +> = {0.25f, 0.05f, 0.02f };*/ + +float3 skinScatteringOuterColor < + string UIGroup = "BackScattering"; + string UIName = "Back Scattering Color"; + string UIWidget = "ColorPicker"; + int UIOrder = 218; +> = { 0.25f, 0.05f, 0.02f }; + +float skinScatteringAmount < + string UIGroup = "BackScattering"; + float UIMin = 0.0; + float UISoftMax = 6.0; + float UIMax = 6; + float UIStep = 0.1; + string UIName = "Back Scattering Amount"; + int UIOrder = 219; +> = 1.0; + +float skinAmbientScatteringAmount < + string UIGroup = "BackScattering"; + float UIMin = 0.0; + float UISoftMax = 6.0; + float UIMax = 6; + float UIStep = 0.1; + string UIName = "Back Scattering Ambient Amount"; + int UIOrder = 220; +> = 1.0; + +/* float skinScatteringPlane < + string UIGroup = "BackScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "Back Scattering Far Plane"; + int UIOrder = 218; +> = 1.0;*/ + +// --------------------------------------------- +// Specular GROUP +// --------------------------------------------- + +bool UseSpecularTexture < + string UIGroup = "Specular"; + string UIName = "Use Specular Map"; + int UIOrder = 301; +> = false; + +bool UseSpecularTextureAlpha < + string UIGroup = "Specular"; + string UIName = "Use Roughness Map Alpha"; + int UIOrder = 301; +> = false; + +float3 SpecularColor : Specular < + string UIGroup = "Specular"; + string UIName = "Specular Color"; + string UIWidget = "ColorPicker"; + int UIOrder = 303; +> = { 1.0f, 1.0f, 1.0f }; + + +float LobeMix < + string UIGroup = "Specular"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1.0; + float UIStep = 0.01; + string UIName = "Lobe Mixing"; + int UIOrder = 304; +> = 0.75; + +float Roughness < + string UIGroup = "Specular"; + string UIWidget = "Slider"; + float UIMin = 0.01; + float UISoftMax = 1.0; + float UIMax = 1.0; + float UIStep = 0.01; + string UIName = "Roughness multiplier"; + int UIOrder = 305; +> = .2; + +// --------------------------------------------- +// Occlusion GROUP +// --------------------------------------------- + +bool UseAmbientOcclusionTexture < + string UIGroup = "Occlusion"; + string UIName = "Use Occlusion Map"; + int UIOrder = 400; +> = false; + +float OcclusionAmount < + string UIGroup = "Occlusion"; + string UIWidget = "Slider"; + float UIMin = 0.01; + float UISoftMax = 2.0; + float UIMax = 2.0; + float UIStep = 0.01; + string UIName = "Occlusion Amount"; + int UIOrder = 402; +> = 1.0; + +// --------------------------------------------- +// Cavity GROUP +// --------------------------------------------- + +bool UseCavityTexture < + string UIGroup = "Cavity"; + string UIName = "Use Cavity Map"; + int UIOrder = 500; +> = false; + +float CavityAmount < + string UIGroup = "Cavity"; + string UIWidget = "Slider"; + float UIMin = 0.01; + float UISoftMax = 2.0; + float UIMax = 2.0; + float UIStep = 0.01; + string UIName = "Cavity Amount"; + int UIOrder = 502; +> = 1.0; + +// --------------------------------------------- +// Normal GROUP +// --------------------------------------------- +bool UseNormalTexture < + string UIGroup = "Normal"; + string UIName = "Use Normal Map"; + int UIOrder = 600; +> = false; + +float NormalHeight < + string UIGroup = "Normal"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 5.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + string UIName = "Normal Height"; + int UIOrder = 603; +> = 1.0; + +bool SupportNonUniformScale < + string UIGroup = "Normal"; + string UIName = "Support Non-Uniform Scale"; + int UIOrder = 604; +> = true; + +int NormalCoordsysX < + string UIGroup = "Normal"; + string UIWidget = "Slider"; + float UIMin = 0; + float UIMax = 1; + float UIStep = 1; + string UIFieldNames = "Positive:Negative"; + string UIName = "Normal X (Red)"; + int UIOrder = 605; +> = 0; + +int NormalCoordsysY < + string UIGroup = "Normal"; + string UIWidget = "Slider"; + float UIMin = 0; + float UIMax = 1; + float UIStep = 1; + string UIFieldNames = "Positive:Negative"; + string UIName = "Normal Y (Green)"; + int UIOrder = 606; +> = 0; + +// --------------------------------------------- +// Micro Details GROUP +// --------------------------------------------- + +bool UseMicroCavityTexture < + string UIGroup = "Micro Details"; + string UIName = "Use Micro Cavity Map"; + int UIOrder = 700; +> = false; + +float MicroCavityAmount < + string UIGroup = "Micro Details"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 2.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + string UIName = "Micro Cavity Amount"; + int UIOrder = 702; +> = 1.0; + +bool UseMicroNormalTexture < + string UIGroup = "Micro Details"; + string UIName = "Use Micro Normal Map"; + int UIOrder = 703; +> = false; + +float MicroNormalHeight < + string UIGroup = "Micro Details"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 5.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + string UIName = "Micro Normal Height"; + int UIOrder = 705; +> = 1.0; + +float MicroScale < + string UIGroup = "Micro Details"; + string UIWidget = "Slider"; + float UIMin = 16.0; + float UISoftMax = 256.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + string UIName = "Micro Scale"; + int UIOrder = 706; +> = 32; + +// --------------------------------------------- +// Opacity GROUP +// --------------------------------------------- +float Opacity : OPACITY < + string UIGroup = "Opacity"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UIMax = 1.0; + float UIStep = 0.001; + string UIName = "Opacity"; + int UIOrder = 801; +> = 1.0; + +bool UseOpacityMaskTexture < + string UIGroup = "Opacity"; + string UIName = "Opacity Mask"; + int UIOrder = 802; +> = false; + +// at what value do we clip away pixels +float OpacityMaskBias < + string UIGroup = "Opacity"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UIMax = 1.0; + float UIStep = 0.001; + string UIName = "Opacity Mask Bias"; + int UIOrder = 803; +> = 0.1; + +#ifdef _SUPPORTTESSELLATION_ +// --------------------------------------------- +// Tessellation and Displacement GROUP +// --------------------------------------------- +int DisplacementModel < + string UIGroup = "Tessellation and Displacement"; + string UIName = "Displacement Model"; + string UIFieldNames = "Grayscale:Tangent Vector"; + float UIMin = 0; + float UIMax = 1; + float UIStep = 1; + int UIOrder = 900; +> = false; + +bool UseDisplacementMap < + string UIGroup = "Tessellation and Displacement"; + string UIName = "Displacement Map"; + int UIOrder = 901; +> = false; + +int VectorDisplacementCoordSys < + string UIGroup = "Tessellation and Displacement"; + string UIWidget = "Slider"; + string UIFieldNames = "Mudbox (XZY):Maya (XYZ)"; + string UIName = "Displacement Coordsys"; + float UIMin = 0; + float UIMax = 1; + float UIStep = 1; + int UIOrder = 903; +> = 0; + +float DisplacementHeight < + string UIGroup = "Tessellation and Displacement"; + float UISoftMin = 0.0; + float UISoftMax = 10.0; + string UIName = "Displacement Height"; + float UIMin = -(_3DSMAX_SPIN_MAX); + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.1; + int UIOrder = 904; +> = 0.5; + +// This allows you to control what the 'base' value for displacement is. +// When the offset value is 0.5, that means that a gray value (color: 128,128,128) will get 0 displacement. +// A value of 0 would then dent in. +// A value of 1 would then extrude. +float DisplacementOffset < + string UIGroup = "Tessellation and Displacement"; + float UISoftMin = -1.0; + float UISoftMax = 1.0; + float UIMin = -(_3DSMAX_SPIN_MAX); + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.1; + string UIName = "Displacement Offset"; + int UIOrder = 905; +> = 0.5; + +// This gives the artist control to prevent this shader from clipping away faces to quickly when displacement is actually keeping the faces on screen. +// This is also important for e.g. shadow map generation to make sure displaced vertices are not clipped out of the light's view +// See BBoxExtraScale for artist control over Maya clipping the entire object away when it thinks it leaves the view. +float DisplacementClippingBias < + string UIGroup = "Tessellation and Displacement"; + float UISoftMin = 0.0; + float UISoftMax = 99.0; + float UIMin = -(_3DSMAX_SPIN_MAX); + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.5; + string UIName = "Displacement Clipping Bias"; + int UIOrder = 906; +> = 5.0; + +// This gives the artist control to prevent maya from clipping away the entire object to fast in case displacement is used. +// Its semantic has to be BoundingBoxExtraScale +float BBoxExtraScale : BoundingBoxExtraScale < + string UIGroup = "Tessellation and Displacement"; + float UIMin = 1.0; + float UISoftMax = 10.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.5; + string UIName = "Bounding Box Extra Scale"; + int UIOrder = 907; +> = 1.0; + +float TessellationRange < + string UIGroup = "Tessellation and Displacement"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 999.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 1.0; + string UIName = "Tessellation Range"; + int UIOrder = 908; +> = { 0 }; + +float TessellationMin < + string UIGroup = "Tessellation and Displacement"; + float UIMin = 1.0; + float UISoftMax = 10.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.5; + string UIName = "Tessellation Minimum"; + int UIOrder = 909; +> = 3.0; + +float FlatTessellation < + string UIGroup = "Tessellation and Displacement"; + float UIMin = 0.0; + float UIMax = 1.0; + float UIStep = 0.1; + string UIName = "Flat Tessellation"; + int UIOrder = 910; +> = 0.0; +#endif + +// --------------------------------------------- +// UV assignment GROUP +// --------------------------------------------- +// Use the Surface Data Section to set your UVset names for each Texcoord. +// E.g. TexCoord1 = uv:UVset +// Then pick a Texcoord in the UV Section to use that UVset for a texture. + +int DiffuseTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Diffuse Map UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2002; +> = 0; + +int OcclusionTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Ambient Occlusion Map UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2003; +> = 1; + +int OpacityMaskTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Opacity Mask UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2005; +> = 0; + +int SpecularTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Specular Map UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2006; +> = 0; + +int NormalTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Normal Map UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2008; +> = 0; + +#ifdef _SUPPORTTESSELLATION_ +int DisplacementTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Displacement Map UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2010; +> = 0; +#endif + +int ThicknessTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Translucency Mask UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2011; +> = 0; +} //end UpdatePerObject cbuffer + +//------------------------------------ +// Light parameters +//------------------------------------ +cbuffer UpdateLights : register(b2) { +// --------------------------------------------- +// Light 0 GROUP +// --------------------------------------------- +// This value is controlled by Maya to tell us if a light should be calculated +// For example the artist may disable a light in the scene, or choose to see only the selected light +// This flag allows Maya to tell our shader not to contribute this light into the lighting +bool light0Enable : LIGHTENABLE < +string Object = "Light 0"; // UI Group for lights, auto-closed +string UIName = "Enable Light 0"; +int UIOrder = 20; +#ifdef _MAYA_ +> = false; // maya manages lights itself and defaults to no lights +#else +> = true; // in 3dsMax we should have the default light enabled +#endif + +// follows LightParameterInfo::ELightType +// spot = 2, point = 3, directional = 4, ambient = 5, +int light0Type : LIGHTTYPE < + string Object = "Light 0"; + string UIName = "Light 0 Type"; + string UIFieldNames = "None:Default:Spot:Point:Directional:Ambient"; + int UIOrder = 21; + float UIMin = 0; + float UIMax = 5; + float UIStep = 1; +> = 2; // default to spot so the cone angle etc work when "Use Shader Settings" option is used + +float3 light0Pos : POSITION < + string Object = "Light 0"; + string UIName = "Light 0 Position"; + string Space = "World"; + int UIOrder = 22; + int RefID = 0; // 3DSMAX +> = { 100.0f, 100.0f, 100.0f }; + +float3 light0Color : LIGHTCOLOR < + string Object = "Light 0"; +#ifdef _3DSMAX_ + int LightRef = 0; + string UIWidget = "None"; +#else + string UIName = "Light 0 Color"; + string UIWidget = "Color"; + int UIOrder = 23; +#endif +> = { 1.0f, 1.0f, 1.0f }; + +float light0Intensity : LIGHTINTENSITY < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 0"; + string UIName = "Light 0 Intensity"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 24; +#endif +> = { 1.0f }; + +float3 light0Dir : DIRECTION < + string Object = "Light 0"; + string UIName = "Light 0 Direction"; + string Space = "World"; + int UIOrder = 25; + int RefID = 0; // 3DSMAX +> = { 100.0f, 100.0f, 100.0f }; + +#ifdef _MAYA_ +float light0ConeAngle : HOTSPOT // In radians +#else +float light0ConeAngle : LIGHTHOTSPOT +#endif +< + string Object = "Light 0"; +#ifdef _3DSMAX_ + int LightRef = 0; + string UIWidget = "None"; +#else + string UIName = "Light 0 Cone Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 26; +#endif +> = { 0.46f }; + +#ifdef _MAYA_ +float light0FallOff : FALLOFF // In radians. Sould be HIGHER then cone angle or lighted area will invert +#else +float light0FallOff : LIGHTFALLOFF +#endif +< + string Object = "Light 0"; +#ifdef _3DSMAX_ + int LightRef = 0; + string UIWidget = "None"; +#else + string UIName = "Light 0 Penumbra Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 27; +#endif +> = { 0.7f }; + +float light0AttenScale : DECAYRATE < + string Object = "Light 0"; + string UIName = "Light 0 Decay"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 28; +> = { 0.0 }; + +bool light0ShadowOn : SHADOWFLAG < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 0"; + string UIName = "Light 0 Casts Shadow"; + string UIWidget = "None"; + int UIOrder = 29; +#endif +> = true; + +float4x4 light0Matrix : SHADOWMAPMATRIX < + string Object = "Light 0"; + string UIWidget = "None"; +>; + +// --------------------------------------------- +// Light 1 GROUP +// --------------------------------------------- +bool light1Enable : LIGHTENABLE < + string Object = "Light 1"; + string UIName = "Enable Light 1"; + int UIOrder = 30; +> = false; + +int light1Type : LIGHTTYPE < + string Object = "Light 1"; + string UIName = "Light 1 Type"; + string UIFieldNames = "None:Default:Spot:Point:Directional:Ambient"; + float UIMin = 0; + float UIMax = 5; + int UIOrder = 31; +> = 2; + +float3 light1Pos : POSITION < + string Object = "Light 1"; + string UIName = "Light 1 Position"; + string Space = "World"; + int UIOrder = 32; + int RefID = 1; // 3DSMAX +> = { -100.0f, 100.0f, 100.0f }; + +float3 light1Color : LIGHTCOLOR < + string Object = "Light 1"; +#ifdef _3DSMAX_ + int LightRef = 1; + string UIWidget = "None"; +#else + string UIName = "Light 1 Color"; + string UIWidget = "Color"; + int UIOrder = 33; +#endif +> = { 1.0f, 1.0f, 1.0f }; + +float light1Intensity : LIGHTINTENSITY < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 1"; + string UIName = "Light 1 Intensity"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 34; +#endif +> = { 1.0f }; + +float3 light1Dir : DIRECTION < + string Object = "Light 1"; + string UIName = "Light 1 Direction"; + string Space = "World"; + int UIOrder = 35; + int RefID = 1; // 3DSMAX +> = { 100.0f, 100.0f, 100.0f }; + +#ifdef _MAYA_ +float light1ConeAngle : HOTSPOT // In radians +#else +float light1ConeAngle : LIGHTHOTSPOT +#endif +< + string Object = "Light 1"; +#ifdef _3DSMAX_ + int LightRef = 1; + string UIWidget = "None"; +#else + string UIName = "Light 1 Cone Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 36; +#endif +> = { 45.0f }; + +#ifdef _MAYA_ +float light1FallOff : FALLOFF // In radians. Sould be HIGHER then cone angle or lighted area will invert +#else +float light1FallOff : LIGHTFALLOFF +#endif +< + string Object = "Light 1"; +#ifdef _3DSMAX_ + int LightRef = 1; + string UIWidget = "None"; +#else + string UIName = "Light 1 Penumbra Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 37; +#endif +> = { 0.0f }; + +float light1AttenScale : DECAYRATE < + string Object = "Light 1"; + string UIName = "Light 1 Decay"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 38; +> = { 0.0 }; + +bool light1ShadowOn : SHADOWFLAG < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 1"; + string UIName = "Light 1 Casts Shadow"; + string UIWidget = "None"; + int UIOrder = 39; +#endif +> = true; + +float4x4 light1Matrix : SHADOWMAPMATRIX < + string Object = "Light 1"; + string UIWidget = "None"; +>; + +// --------------------------------------------- +// Light 2 GROUP +// --------------------------------------------- +bool light2Enable : LIGHTENABLE < + string Object = "Light 2"; + string UIName = "Enable Light 2"; + int UIOrder = 40; +> = false; + +int light2Type : LIGHTTYPE < + string Object = "Light 2"; + string UIName = "Light 2 Type"; + string UIFieldNames = "None:Default:Spot:Point:Directional:Ambient"; + float UIMin = 0; + float UIMax = 5; + int UIOrder = 41; +> = 2; + +float3 light2Pos : POSITION < + string Object = "Light 2"; + string UIName = "Light 2 Position"; + string Space = "World"; + int UIOrder = 42; + int RefID = 2; // 3DSMAX +> = { 100.0f, 100.0f, -100.0f }; + +float3 light2Color : LIGHTCOLOR < + string Object = "Light 2"; +#ifdef _3DSMAX_ + int LightRef = 2; + string UIWidget = "None"; +#else + string UIName = "Light 2 Color"; + string UIWidget = "Color"; + int UIOrder = 43; +#endif +> = { 1.0f, 1.0f, 1.0f }; + +float light2Intensity : LIGHTINTENSITY < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 2"; + string UIName = "Light 2 Intensity"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 44; +#endif +> = { 1.0f }; + +float3 light2Dir : DIRECTION < + string Object = "Light 2"; + string UIName = "Light 2 Direction"; + string Space = "World"; + int UIOrder = 45; + int RefID = 2; // 3DSMAX +> = { 100.0f, 100.0f, 100.0f }; + +#ifdef _MAYA_ +float light2ConeAngle : HOTSPOT // In radians +#else +float light2ConeAngle : LIGHTHOTSPOT +#endif +< + string Object = "Light 2"; +#ifdef _3DSMAX_ + int LightRef = 2; + string UIWidget = "None"; +#else + string UIName = "Light 2 Cone Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 46; +#endif +> = { 45.0f }; + +#ifdef _MAYA_ +float light2FallOff : FALLOFF // In radians. Sould be HIGHER then cone angle or lighted area will invert +#else +float light2FallOff : LIGHTFALLOFF +#endif +< +string Object = "Light 2"; +#ifdef _3DSMAX_ + int LightRef = 2; + string UIWidget = "None"; +#else + string UIName = "Light 2 Penumbra Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 47; +#endif +> = { 0.0f }; + +float light2AttenScale : DECAYRATE < + string Object = "Light 2"; + string UIName = "Light 2 Decay"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 48; +> = { 0.0 }; + +bool light2ShadowOn : SHADOWFLAG < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 2"; + string UIName = "Light 2 Casts Shadow"; + string UIWidget = "None"; + int UIOrder = 49; +#endif +> = true; + +float4x4 light2Matrix : SHADOWMAPMATRIX < + string Object = "Light 2"; + string UIWidget = "None"; +>; + +} //end lights cbuffer + +//------------------------------------ +// Structs +//------------------------------------ +struct APPDATA { + float3 position : POSITION; + float2 texCoord0 : TEXCOORD0; + float2 texCoord1 : TEXCOORD1; + float2 texCoord2 : TEXCOORD2; + float3 normal : NORMAL; + float3 binormal : BINORMAL; + float3 tangent : TANGENT; +}; + +struct SHADERDATA { + float4 position : SV_Position; + float2 texCoord0 : TEXCOORD0; + float2 texCoord1 : TEXCOORD1; + float2 texCoord2 : TEXCOORD2; + float3 worldNormal : NORMAL; + float4 worldTangent : TANGENT; + float3 worldPosition : TEXCOORD3; + float4 screenCoord : TEXCOORD14; + +#ifdef _SUPPORTTESSELLATION_ + // Geometry generated control points: + // .worldPosition is CP0, so we don't need to store it again + float3 CP1 : TEXCOORD4; + float3 CP2 : TEXCOORD5; + + // PN-AEN with displacement fix: + float4 dominantEdge : TEXCOORD6; // both vertices of an edge + float2 dominantVertex : TEXCOORD7; // corner + + // Dominant normal and tangent for VDM crack fix: + // this could be compacted into less texcoords, but left as-is for readability + float3 dominantNormalE0 : TEXCOORD8; + float3 dominantNormalE1 : TEXCOORD9; + float3 dominantNormalCorner : TEXCOORD10; + + float3 dominantTangentE0 : TEXCOORD11; + float3 dominantTangentE1 : TEXCOORD12; + float3 dominantTangentCorner : TEXCOORD13; + + float clipped : CLIPPED; +#endif +}; + + +#ifdef _SUPPORTTESSELLATION_ +struct HSCONSTANTDATA { + float TessFactor[3] : SV_TessFactor; // tessellation amount for each edge of patch + float InsideTessFactor : SV_InsideTessFactor; // tessellation amount within a patch surface (would be float2 for quads) + float3 CPCenter : CENTER; // Geometry generated center control point +}; +#endif + +//------------------------------------ +// BRDF +//------------------------------------ + +float sqr(float x) { + return x*x; +} + +// [Beckmann 1963, "The scattering of electromagnetic waves from rough surfaces"] +float D_Beckmann(float Roughness, float NoH) { + float m = Roughness; + float m2 = m * m; + + float NdotH2 = sqr(NoH); + return exp((NdotH2 - 1) / (m2 * NdotH2)) / (PI * m2 * NdotH2 * NdotH2); +} + +// This function is from Nvidia's Human Head demo +float D_BeckmannNVIDIA(float m, float ndoth) { + float alpha = acos(ndoth); + float ta = tan(alpha); + float val = 1.0 / (m*m*pow(ndoth, 4.0)) * exp(-(ta*ta) / (m*m)); + return val; +} + +// Schlick 1994, "An Inexpensive BRDF Model for Physically-Based Rendering" +// Lagarde 2012, "Spherical Gaussian approximation for Blinn-Phong, Phong and Fresnel" +float3 F_Schlick(float3 SpecularColor, float LdotH) { + return SpecularColor + (1.0f - SpecularColor) * exp2((-5.55473 * LdotH - 6.98316) * LdotH); +} + +// Schlick 1994, "An Inexpensive BRDF Model for Physically-Based Rendering" +// Lagarde 2011, "Adopting a physically based shading model" +// Lagarde 2012, "Spherical Gaussian approximation for Blinn-Phong, Phong and Fresnel" +float3 F_LagardeSchlick(float3 SpecularColor, float Roughness, float NdotV) { + return SpecularColor + (max(1 - Roughness, SpecularColor) - SpecularColor) * exp2((-5.55473 * NdotV - 6.98316) * NdotV); +} + +float3 F_KelemenSzirmaykalos(float3 H, float3 V, float3 F0) { + float base = 1.0 - dot(V, H); + float exponential = pow(base, 5.0); + return exponential + F0 * (1.0 - exponential); +} + +float3 KelemenSzirmaykalos(float3 N, float3 L, float3 V, float roughness, float3 specular) { + float3 result = float3(0.0, 0.0, 0.0); + float NdotL = dot(N, L); + + if (NdotL > 0.0) { + float3 h = L + V; + float3 H = normalize(h); + float NdotH = dot(N, H); + float VdotH = dot(V, H); + float D = D_BeckmannNVIDIA(roughness, NdotH); + float3 F = F_Schlick(specular, VdotH); + float G = 1; + float3 specularDirect = max(D * G * F / dot(h, h), 0); + result = specularDirect * NdotL; // Specular is added for more tuning + } + return result; +} + +float3 PennerSkin(float3 skinCoef, float3 N, float3 L, float3 Nlow, float Curvature) { + float3 pennerX = lerp(N, Nlow, skinCoef.x); + float3 pennerY = lerp(N, Nlow, skinCoef.y); + float3 pennerZ = lerp(N, Nlow, skinCoef.z); + + float3 pennerNdotL = float3(dot(pennerX, L), dot(pennerY, L), dot(pennerZ, L)); + pennerNdotL = saturate(pennerNdotL * 0.5 + 0.5); + + float3 pennerlookUp; + pennerlookUp.r = LutTexture.Sample(SamplerAnisoClamp, float2(pennerNdotL.r, Curvature)).r; + pennerlookUp.g = LutTexture.Sample(SamplerAnisoClamp, float2(pennerNdotL.g, Curvature)).g; + pennerlookUp.b = LutTexture.Sample(SamplerAnisoClamp, float2(pennerNdotL.b, Curvature)).b; + + return pennerlookUp; +} + +float3 PennerSkinNoLUT(float3 skinCoef, float3 N, float3 L, float3 Nlow) { + float3 pennerX = lerp(N, Nlow, skinCoef.x); + float3 pennerY = lerp(N, Nlow, skinCoef.y); + float3 pennerZ = lerp(N, Nlow, skinCoef.z); + + float3 pennerNdotL = float3(dot(pennerX, L), dot(pennerY, L), dot(pennerZ, L)); + + float3 pennerlookUp; + pennerlookUp.r = saturate(pennerNdotL.r*(float3(1, 1, 1).r - skinCoef.r) + skinCoef.r) * (1 - skinCoef.r); + pennerlookUp.g = saturate(pennerNdotL.g*(float3(1, 1, 1).g - skinCoef.g) + skinCoef.g) * (1 - skinCoef.g); + pennerlookUp.b = saturate(pennerNdotL.b*(float3(1, 1, 1).b - skinCoef.b) + skinCoef.b) * (1 - skinCoef.b); + + return pennerlookUp; +} + +float3 diffuseSkinIBL(float3 skinCoef, float3 diffuseIBL_HighFreq, float3 diffuseIBL_LowFreq) { + return lerp(diffuseIBL_HighFreq, diffuseIBL_LowFreq, skinCoef); +} + +//------------------------------------ +// Functions +//------------------------------------ + +float4 ComputeScreenPos(float4 pos) { +#if UNITY_UV_STARTS_AT_TOP + float scale = -1.0; +#else + float scale = 1.0; +#endif + + float4 o = pos * 0.5f; + o.xy = float2(o.x, o.y*scale) + o.w; + o.zw = pos.zw; + + return o; +} + +// Occlusion taking into account the color of the texture multiplied to it +float3 coloredOcclusion(float3 color, float occlusion) { + float3 coloredOcclusion = lerp(float3(1.0f, 1.0f, 1.0f), color, (1 - occlusion)); + //color *= coloredOcclusion; + return coloredOcclusion; +} + +float specularOcclusion(float3 N, float3 V, float Occlusion) { + const float specularPow = 5.0; + float NdotV = dot(N, V); + float s = saturate(-0.3 + NdotV * NdotV); + + return lerp(pow(Occlusion, specularPow), 1.0, s); +} + +float2 pickTexcoord(int index, float2 t0, float2 t1, float2 t2) { + float2 tcoord = t0; + + if (index == 1) { + tcoord = t1; + } else if (index == 2) { + tcoord = t2; + } + + return tcoord; +} + +float3 RotateVectorYaw(float3 vec, float degreeOfRotation) { + float3 rotatedVec = vec; + float angle = radians(degreeOfRotation); + + rotatedVec.x = (cos(angle) * vec.x) - (sin(angle) * vec.z); + rotatedVec.z = (sin(angle) * vec.x) + (cos(angle) * vec.z); + + return rotatedVec; +} + +// Spot light cone +float lightConeangle(float coneAngle, float coneFalloff, float3 lightVec, float3 lightDir) { + // the cone falloff should be equal or bigger then the coneAngle or the light inverts + // this is added to make manually tweaking the spot settings easier. + if (coneFalloff < coneAngle) { + coneFalloff = coneAngle; + } + + float LdotDir = dot(normalize(lightVec), lightDir); + + // cheaper cone, no fall-off control would be: + // float cone = pow(saturate(LdotDir), 1 / coneAngle); + + // higher quality cone (more expensive): + float cone = smoothstep(cos(coneFalloff), cos(coneAngle), LdotDir); + + return cone; +} + +#define SHADOW_FILTER_TAPS_CNT 10 + +float2 SuperFilterTaps[SHADOW_FILTER_TAPS_CNT] < string UIWidget = "None"; > = { + { -0.84052f, -0.073954f }, + { -0.326235f, -0.40583f }, + { -0.698464f, 0.457259f }, + { -0.203356f, 0.6205847f }, + { 0.96345f, -0.194353f }, + { 0.473434f, -0.480026f }, + { 0.519454f, 0.767034f }, + { 0.185461f, -0.8945231f }, + { 0.507351f, 0.064963f }, + { -0.321932f, 0.5954349f } +}; + +static float4 kernel[25] = { + { 0.530605, 0.613514, 0.739601, 0 }, + { 0.000973794, 1.11862e-005, 9.43437e-007, -3 }, + { 0.00333804, 7.85443e-005, 1.2945e-005, -2.52083 }, + { 0.00500364, 0.00020094, 5.28848e-005, -2.08333 }, + { 0.00700976, 0.00049366, 0.000151938, -1.6875 }, + { 0.0094389, 0.00139119, 0.000416598, -1.33333 }, + { 0.0128496, 0.00356329, 0.00132016, -1.02083 }, + { 0.017924, 0.00711691, 0.00347194, -0.75 }, + { 0.0263642, 0.0119715, 0.00684598, -0.520833 }, + { 0.0410172, 0.0199899, 0.0118481, -0.333333 }, + { 0.0493588, 0.0367726, 0.0219485, -0.1875 }, + { 0.0402784, 0.0657244, 0.04631, -0.0833333 }, + { 0.0211412, 0.0459286, 0.0378196, -0.0208333 }, + { 0.0211412, 0.0459286, 0.0378196, 0.0208333 }, + { 0.0402784, 0.0657244, 0.04631, 0.0833333 }, + { 0.0493588, 0.0367726, 0.0219485, 0.1875 }, + { 0.0410172, 0.0199899, 0.0118481, 0.333333 }, + { 0.0263642, 0.0119715, 0.00684598, 0.520833 }, + { 0.017924, 0.00711691, 0.00347194, 0.75 }, + { 0.0128496, 0.00356329, 0.00132016, 1.02083 }, + { 0.0094389, 0.00139119, 0.000416598, 1.33333 }, + { 0.00700976, 0.00049366, 0.000151938, 1.6875 }, + { 0.00500364, 0.00020094, 5.28848e-005, 2.08333 }, + { 0.00333804, 7.85443e-005, 1.2945e-005, 2.52083 }, + { 0.000973794, 1.11862e-005, 9.43437e-007, 3 } +}; + + +static float2 kernelRandom[32] = { + { 0.254395, 0.385445 }, + { -0.139177, 0.571074 }, + { -0.453510, 0.962140 }, + { 0.482684, 0.346190 }, + { 0.889741, 0.724799 }, + { -0.661047, -0.137344 }, + { -0.193311, -0.313475 }, + { 0.363177, -0.960291 }, + { -0.225866, -0.654962 }, + { 0.407875, 0.431522 }, + { -0.543008, -0.992827 }, + { -0.878493, -0.896999 }, + { -0.641776, 0.130757 }, + { -0.785279, -0.015190 }, + { 0.469054, 0.248633 }, + { -0.820410, -0.562833 }, + { 0.174019, -0.618069 }, + { -0.906449, -0.275099 }, + { -0.655285, -0.956021 }, + { 0.453776, -0.085425 }, + { -0.430788, -0.089530 }, + { -0.587370, -0.851826 }, + { 0.149056, -0.474322 }, + { 0.228684, 0.321661 }, + { -0.668752, -0.829400 }, + { -0.729554, 0.438250 }, + { -0.467018, -0.252882 }, + { 0.090398, 0.618760 }, + { 0.741840, 0.516401 }, + { -0.983891, 0.248701 }, + { -0.162010, -0.714455 }, + { 0.308825, 0.787175 } +}; + +float shadowMapTexelSize < string UIWidget = "None"; > = { 0.00195313 }; // (1.0f / 512) + +// Shadows: +// Percentage-Closer Filtering +float3 lightShadow(float4x4 LightViewPrj, uniform Texture2D ShadowMapTexture, float3 VertexWorldPosition, float2 screenCoord, float skinRadius, float2 size) { + float4 dither = 2.0 * DitherTexture.SampleLevel(SamplerAnisoWrap, screenCoord.xy * size / 128, 0) - 1.0; + float2x2 rotationMatrix = float2x2(dither.x, dither.y, -dither.y, dither.x); + + float ditherShadow = 0; + float shadowColored = 0; + + float4 Pndc = mul(float4(VertexWorldPosition.xyz, 1.0), LightViewPrj); + Pndc.xyz /= Pndc.w; + + if (Pndc.x > -1.0f && Pndc.x < 1.0f && Pndc.y > -1.0f && Pndc.y < 1.0f && Pndc.z > 0.0f && Pndc.z < 1.0f) { + float2 uv = 0.5f * Pndc.xy + 0.5f; + uv = float2(uv.x, (1.0 - uv.y)); // maya flip Y + float z = Pndc.z - shadowDepthBias / Pndc.w; + + screenCoord.y = 1 - screenCoord.y; + + float shadowDepth = skinRadius; + shadowDepth *= 4.0; + + for (int i = 0; i < 32; ++i) { + float2 offset = kernelRandom[i] * shadowDepth * shadowMapTexelSize; + float2 ditherOffset = mul(offset, rotationMatrix); + ditherOffset = lerp(offset, ditherOffset, shadowDither); + float3 sample = z - ShadowMapTexture.SampleLevel(SamplerShadowDepth, uv + ditherOffset, 0).x; + + ditherShadow += (sample >= 0.0f) ? 0.0f : (1.0f / 32); + } + } + + return ditherShadow; +} + +float3 lightShadowSkin(float4x4 LightViewPrj, uniform Texture2D ShadowMapTexture, float3 VertexWorldPosition, float2 screenCoord, float skinRadius, float2 size, float2 dir) { + + float4 dither = 2.0 * DitherTexture.SampleLevel(SamplerAnisoWrap, screenCoord.xy * size / 128, 0) - 1.0; + float2x2 rotationMatrix = float2x2(dither.x, dither.y, -dither.y, dither.x); + + float ditherShadow = 0; + float3 shadowColored = float3(0, 0, 0); + + float4 Pndc = mul(float4(VertexWorldPosition.xyz, 1.0), LightViewPrj); + Pndc.xyz /= Pndc.w; + if (Pndc.x > -1.0f && Pndc.x < 1.0f && Pndc.y > -1.0f && Pndc.y < 1.0f && Pndc.z > 0.0f && Pndc.z < 1.0f) { + float2 uv = 0.5f * Pndc.xy + 0.5f; + uv = float2(uv.x, (1.0 - uv.y)); // maya flip Y + + float z = Pndc.z - shadowDepthBias / Pndc.w; + screenCoord.y = 1 - screenCoord.y; + + float shadowDepth = skinRadius; + shadowDepth *= 4.0; + + for (int i = 0; i < 25; ++i) { + float2 offset = kernel[i].a * dir * shadowDepth * shadowMapTexelSize; + offset = mul(offset, rotationMatrix); + float3 sample = z - ShadowMapTexture.SampleLevel(SamplerShadowDepth, uv + offset, 0).x; + ditherShadow = (sample >= 0.0f) ? 0.0f : 1.0f; + + shadowColored += ditherShadow * kernel[i].rgb; + } + } + + return shadowColored; +} + +#ifdef _SUPPORTTESSELLATION_ +// Pick dominant for crack free displacement (original function by Bryan Dudash, modified to support any float3) +float3 PickDominant(float3 vec, // vector to change + float U, float V, float W, // barycoords + float3 DE0A, float3 DE0B, // domimant edge 0 vertex A and B + float3 DE1A, float3 DE1B, // domimant edge 1 vertex A and B + float3 DE2A, float3 DE2B, // domimant edge 2 vertex A and B + float3 DV0, float3 DV1, float3 DV2) { // dominant corners + // Override the texture coordinates along the primitive edges and at the corners. + // Keep the original interpolated coords for the inner area of the primitive. + + float3 dominantVector = vec; + + float edgeThreshold = 0.0001f; + float edgeU = (U == 0) ? 1 : 0; + float edgeV = (V == 0) ? 1 : 0; + float edgeW = (W == 0) ? 1 : 0; + + float corner = ((edgeU + edgeV + edgeW) == 2) ? 1 : 0; // two are 0, means we are a corner + float edge = ((edgeU + edgeV + edgeW) == 1) ? 1 : 0; // one of them is 0, means we are an edge + float innerarea = ((edgeU + edgeV + edgeW) == 0) ? 1 : 0; // none are 0, means we are interior + + if (innerarea != 1) { + // Note: the order of the vertices/edges we choose here can be different per application + // and depend on how the index buffer was generated. + // These work for Maya with its PN-AEN18 primitive generator + if (corner) { + if (U > 1.0 - edgeThreshold) + dominantVector = DV1; + else if (V > 1.0 - edgeThreshold) + dominantVector = DV2; + else if (W > 1.0 - edgeThreshold) + dominantVector = DV0; + } else { + if (edgeU) + dominantVector = lerp(DE2A, DE2B, W); + else if (edgeV) + dominantVector = lerp(DE0A, DE0B, U); + else + dominantVector = lerp(DE1A, DE1B, V); + } + } + + return dominantVector; +} + +// outside of view? +float IsClipped(float4 clipPos) { + float W = clipPos.w + DisplacementClippingBias; // bias allows artist to control to early clipping due to displacement + // Test whether the position is entirely inside the view frustum. + return (-W <= clipPos.x && clipPos.x <= W && -W <= clipPos.y && clipPos.y <= W && -W <= clipPos.z && clipPos.z <= W) ? 0.0f : 1.0f; +} + +// Compute whether all three control points along the edge are outside of the view frustum. +// By doing this, we're ensuring that +// 1.0 means clipped, 0.0 means unclipped. +float ComputeClipping(float3 cpA, float3 cpB, float3 cpC) { + // Compute the projected position for each position, then check to see whether they are clipped. + float4 projPosA = mul(float4(cpA, 1), viewPrj), projPosB = mul(float4(cpB, 1), viewPrj), projPosC = mul(float4(cpC, 1), viewPrj); + return min(min(IsClipped(projPosA), IsClipped(projPosB)), IsClipped(projPosC)); +} + +// PN Triangles and PN-AEN control points: +float3 ComputeCP(float3 posA, float3 posB, float3 normA) { + return (2.0f * posA + posB - (dot((posB - posA), normA) * normA)) / 3.0f; +} +#endif + +// Clip pixel away when opacity mask is used +void OpacityMaskClip(float2 uv) { + if (UseOpacityMaskTexture) { + float OpacityMaskMap = OpacityMaskTexture.Sample(SamplerAnisoWrap, uv).x; + + // clip value when less then 0 for punch-through alpha. + clip(OpacityMaskMap < OpacityMaskBias ? -1 : 1); + } +} + + +// Calculate a light: +struct lightOut { + float Specular; + float3 Color; +}; + +lightOut CalculateLight(bool lightEnable, int lightType, float lightAtten, float3 lightPos, float3 vertWorldPos, + float3 lightColor, float lightIntensity, float3 lightDir, float lightConeAngle, float lightFallOff, float4x4 lightViewPrjMatrix, + uniform Texture2D lightShadowMap, bool lightShadowOn, float3 vertexNormal, float3 normal, float3 diffuseColorIn, + float3 eyeVec, float roughness, float3 specularColorIn, float3 thickness, float softenMask, + float gammaCorrection, float opacity, float3 ambientOcclusion, float3 skinOcclusion, float2 screenCoord, float2 size, float scatteringRadius) { + lightOut OUT = (lightOut)0; + + OUT.Specular = 0.0; + OUT.Color = float3(0, 0, 0); + + if (lightEnable) { + // For Maya, flip the lightDir: +#ifdef _MAYA_ + lightDir = -lightDir; +#endif + + bool isAmbientLight = (lightType == 5); + if (isAmbientLight) { + OUT.Color = diffuseColorIn * lightColor * lightIntensity; + OUT.Color.rgb *= ambientOcclusion; + return OUT; + } + + bool isDirectionalLight = (lightType == 4); + float3 lightVec = lerp(lightPos - vertWorldPos, lightDir, isDirectionalLight); + + float3 L = normalize(lightVec); + + // Diffuse: + float3 diffuseDirect = float3(0, 0, 0); + float3 scatter = float3(skinCoeffX, skinCoeffY, skinCoeffZ); + diffuseDirect = PennerSkin(scatter, normal, L, vertexNormal, 1 - (scatteringRadius*skinScattering)) * diffuseColorIn; + //diffuseDirect = PennerSkinNoLUT(scatter,normal,L, vertexNormal) * diffuseColorIn; + + // Specular: + float3 specularDirect = float3(0, 0, 0); + + float3 Lobe1 = KelemenSzirmaykalos(normal, L, eyeVec, roughness, specularColorIn); + float3 Lobe2 = KelemenSzirmaykalos(normal, L, eyeVec, roughness*0.5, specularColorIn); + + specularDirect = Lobe2 * LobeMix + Lobe1 * (1 - LobeMix); + + // Light Attenuation: + bool enableAttenuation = lightAtten > 0.0001f; + float attenuation = 1.0f; + if (!isDirectionalLight) { + attenuation = lerp(1.0, 1 / pow(length(lightVec), lightAtten), enableAttenuation); + } + + // Spot light Cone Angle: + float angle = 1; + if (lightType == 2) { + angle = lightConeangle(lightConeAngle, lightFallOff, lightVec, lightDir); + } + + // Shadows: + float shadow = 1; + float3 skinShadow = float3(1, 1, 1); + float3 softShadow = float3(1, 1, 1); + if (UseShadows && lightShadowOn) { + shadow = lightShadow(lightViewPrjMatrix, lightShadowMap, vertWorldPos, screenCoord, shadowBlur, size); + + skinShadow = LutTexture.Sample(SamplerAnisoClamp, float2(shadow * angle, 1 - shadowScattering)); + skinShadow = lerp(dot(float3(0.33, 0.59, 0.11), skinShadow), skinShadow, shadowSaturation); + skinShadow = lerp(skinShadow, 1, (shadow* angle)*(shadow* angle)*(shadow* angle)); + } + + float3 lightAttenuation = lightIntensity * angle * attenuation * lightColor; + + diffuseDirect *= lightIntensity * skinShadow * attenuation * lightColor; + specularDirect *= lightAttenuation * shadow; + + float3 backScattering = float3(0, 0, 0); + if (UseTranslucency) { + half backRoughness = (1 - skinScatteringRoughness) * 128; + float3 viewScattering = exp2(saturate(dot(eyeVec, -(L + (normal * 0.01)))) * backRoughness - backRoughness) * skinScatteringAmount; + float3 lightScattering = saturate(dot(-L, normal)*0.5 + 0.5) * skinAmbientScatteringAmount; + + //float3 IBLScattering = diffuseIBL; + backScattering = (viewScattering + lightScattering) * lightAttenuation * shadow * thickness; + + float3 profile = skinScatteringOuterColor * backScattering; + backScattering = profile * skinScatteringAmount; + + + /*float scale = 2e4 * (1.0 - skinScatteringAmount) / backRoughness; + + float4 shrinkedPos = float4(vertWorldPos - 0.005 * vertexNormal, 1.0); + + float4 shadowPosition = mul(shrinkedPos, lightViewPrjMatrix); + + float d1 = lightShadowMap.Sample(SamplerShadowDepth, shadowPosition.xy / shadowPosition.w); // 'd1' has a range of 0..1 + + float d2 = shadowPosition.z; // 'd2' has a range of 0..'lightFarPlane' + d1 *= skinScatteringPlane*shadowPosition.w; // So we scale 'd1' accordingly: + float d = scale * abs(d1 - d2); + + float dd = -d * d; + float3 profile = float3(0.233, 0.455, 0.649) * exp(dd / 0.0064) + + float3(0.1, 0.336, 0.344) * exp(dd / 0.0484) + + float3(0.118, 0.198, 0.0) * exp(dd / 0.187) + + float3(0.113, 0.007, 0.007) * exp(dd / 0.567) + + float3(0.358, 0.004, 0.0) * exp(dd / 1.99) + + float3(0.078, 0.0, 0.0) * exp(dd / 7.41); + backScattering = profile * saturate((0.3 + dot(L, -vertexNormal)) / 1.3) * thickness * diffuseColorIn; */ + } + + OUT.Color += diffuseDirect * skinOcclusion; + OUT.Color *= opacity; + OUT.Color += specularDirect * ambientOcclusion + backScattering; + + // Output specular and rim for opacity: + // OUT.Specular = dot(saturate(specularColor), float3(0.3f, 0.6f, 0.1f)); + } // end if light enabled + + return OUT; +} + +//------------------------------------ +// vertex shader with tessellation +//------------------------------------ +// take inputs from 3d-app +// vertex animation/skinning would happen here +SHADERDATA vt(APPDATA IN) { + SHADERDATA OUT = (SHADERDATA)0; + + // we pass vertices in world space + float4 worldPos = mul(float4(IN.position, 1), world); + OUT.worldPosition.xyz = worldPos.xyz; + +#ifdef _SUPPORTTESSELLATION_ + OUT.position = worldPos; +#else + OUT.position = float4(IN.position.xyz, 1); +#endif + + OUT.screenCoord = mul(float4(OUT.position.xyz, 1), viewPrj); + + // Pass through texture coordinates + // flip Y for Maya +#ifdef _MAYA_ + OUT.texCoord0 = float2(IN.texCoord0.x, (1.0 - IN.texCoord0.y)); + OUT.texCoord1 = float2(IN.texCoord1.x, (1.0 - IN.texCoord1.y)); + OUT.texCoord2 = float2(IN.texCoord2.x, (1.0 - IN.texCoord2.y)); +#else + OUT.texCoord0 = IN.texCoord0; + OUT.texCoord1 = IN.texCoord1; + OUT.texCoord2 = IN.texCoord2; +#endif + + // output normals in world space: + if (!SupportNonUniformScale) { + OUT.worldNormal = normalize(mul(IN.normal, (float3x3)world)); + } else { + OUT.worldNormal = normalize(mul(IN.normal, (float3x3)worldIT)); + } + + // output tangent in world space: + if (!SupportNonUniformScale) { + OUT.worldTangent.xyz = normalize(mul(IN.tangent, (float3x3)world)); + } else { + OUT.worldTangent.xyz = normalize(mul(IN.tangent, (float3x3)worldIT)); + } + + // store direction for normal map: + OUT.worldTangent.w = 1; + if (dot(cross(IN.normal.xyz, IN.tangent.xyz), IN.binormal.xyz) < 0.0) { + OUT.worldTangent.w = -1; + } + + return OUT; +} + + +//------------------------------------ +// vertex shader without tessellation +//------------------------------------ +SHADERDATA v(APPDATA IN) { + SHADERDATA OUT = vt(IN); + + // If we don't use tessellation, pass vertices in clip space: +#ifdef _SUPPORTTESSELLATION_ + OUT.position = mul(float4(OUT.position.xyz, 1), viewPrj); +#else + OUT.position = mul(float4(IN.position, 1), wvp); +#endif + + return OUT; +} + +#ifdef _SUPPORTTESSELLATION_ +//------------------------------------ +// hull shader +//------------------------------------ +// executed once per control point. +// control points can be considered the original vertices of the mesh +// outputs a control point +// run parallel with hull constant function +[domain("tri")] +[partitioning("fractional_odd")] +[outputtopology("triangle_cw")] +[patchconstantfunc("HS_Constant")] +[outputcontrolpoints(3)] +[maxtessfactor(64.0)] + +// PN-AEN without displacement fix: +// SHADERDATA HS( InputPatch IN, uint index : SV_OutputControlPointID, uint patchID : SV_PrimitiveID ) + +// PN Triangles, no crack fixes: +// SHADERDATA HS( InputPatch IN, uint index : SV_OutputControlPointID, uint patchID : SV_PrimitiveID ) + + +// PN-AEN and displacement fix +// the index buffer is made up as follows: +// the triangle vertices index (int3) // PNAEN9 and PNAEN18 +// the 3 adjacent edges vertices index (3 * int2) // PNAEN9 and PNAEN18 +// the 3 dominant edges vertices index (3 * int2) // PNAEN18 +// the dominant position vertices index (int3) // PNAEN18 +SHADERDATA HS(InputPatch IN, uint index : SV_OutputControlPointID, uint patchID : SV_PrimitiveID) { + SHADERDATA OUT = (SHADERDATA)0; + + // copy everything first: + OUT = IN[index]; + + // Compute the next output control point ID so we know which edge we're on. + const uint nextIndex = index < 2 ? index + 1 : 0; // (index + 1) % 3 + + // PN-AEN 9 and 18: + const uint neighborIndex = 3 + 2 * index; + const uint neighborNextIndex = neighborIndex + 1; + float3 myCP, neighborCP; + + // Calculate original PN control points and neighbors'. Then average. + myCP = ComputeCP(IN[index].worldPosition, IN[nextIndex].worldPosition, IN[index].worldNormal); + neighborCP = ComputeCP(IN[neighborIndex].worldPosition, IN[neighborNextIndex].worldPosition, IN[neighborIndex].worldNormal); + OUT.CP1 = (myCP + neighborCP) / 2; + + myCP = ComputeCP(IN[nextIndex].worldPosition, IN[index].worldPosition, IN[nextIndex].worldNormal); + neighborCP = ComputeCP(IN[neighborNextIndex].worldPosition, IN[neighborIndex].worldPosition, IN[neighborNextIndex].worldNormal); + OUT.CP2 = (myCP + neighborCP) / 2; + + // PN Triangles only would be: + // OUT.CP1 = ComputeCP( IN[index].worldPosition, IN[nextIndex].worldPosition, IN[index].worldNormal); + // OUT.CP2 = ComputeCP( IN[nextIndex].worldPosition, IN[index].worldPosition, IN[nextIndex].worldNormal); + + // Clipping: + OUT.clipped = ComputeClipping(OUT.worldPosition, OUT.CP1, OUT.CP2); + + // PN-AEN discontinuity code for displacement UVs: + const uint dominantEdgeIndex = 9 + 2 * index; + const uint dominantEdgeNextIndex = dominantEdgeIndex + 1; + const uint dominantVertexIndex = 15 + index; + + // Note: the order of the vertices/edges we choose here can be different per application and + // depend on how the index buffer was generated. + // These work for Maya with its PN-AEN18 primitive generator + float2 dominantEdgeUV = pickTexcoord(DisplacementTexcoord, IN[dominantEdgeIndex].texCoord0, IN[dominantEdgeIndex].texCoord1, IN[dominantEdgeIndex].texCoord2); + float2 dominantEdgeNextUV = pickTexcoord(DisplacementTexcoord, IN[dominantEdgeNextIndex].texCoord0, IN[dominantEdgeNextIndex].texCoord1, IN[dominantEdgeNextIndex].texCoord2); + float2 dominantVertexUV = pickTexcoord(DisplacementTexcoord, IN[dominantVertexIndex].texCoord0, IN[dominantVertexIndex].texCoord1, IN[dominantVertexIndex].texCoord2); + + OUT.dominantEdge = float4(dominantEdgeNextUV, dominantEdgeUV); + OUT.dominantVertex = dominantVertexUV; + + // VDM dominant normal and tangent for displacement crack fix: + OUT.dominantNormalE0 = IN[dominantEdgeNextIndex].worldNormal.xyz; + OUT.dominantNormalE1 = IN[dominantEdgeIndex].worldNormal.xyz; + OUT.dominantNormalCorner = IN[dominantVertexIndex].worldNormal.xyz; + + OUT.dominantTangentE0 = IN[dominantEdgeNextIndex].worldTangent.xyz; + OUT.dominantTangentE1 = IN[dominantEdgeIndex].worldTangent.xyz; + OUT.dominantTangentCorner = IN[dominantVertexIndex].worldTangent.xyz; + + return OUT; +} + +//------------------------------------ +// Hull shader constant function +//------------------------------------ +// executed once per patch +// outputs user defined data per patch and tessellation factor +// calculates control points for vertex and normal and passes to domain +// This hull shader passes the tessellation factors through to the HW tessellator, +// run parallel with hull function +HSCONSTANTDATA HS_Constant(const OutputPatch IN, uint patchID : SV_PrimitiveID) { + HSCONSTANTDATA OUT = (HSCONSTANTDATA)0; + + // future todo: + // triangle is on silhouette? + // triangle is facing camera? If facing backwards, reduce tessellation + // triangle lies in high frequency area of displacement map (density-based tessellation)? + + // Now setup the PNTriangle control points... + // Center control point + float3 f3E = (IN[0].CP1 + IN[0].CP2 + IN[1].CP1 + IN[1].CP2 + IN[2].CP1 + IN[2].CP2) / 6.0f; + float3 f3V = (IN[0].worldPosition + IN[1].worldPosition + IN[2].worldPosition) / 3.0f; + OUT.CPCenter = f3E + ((f3E - f3V) / 2.0f); + + // Clipping: + float4 centerViewPos = mul(float4(OUT.CPCenter, 1), viewPrj); + bool centerClipped = IsClipped(centerViewPos); + + if (IN[0].clipped && IN[1].clipped && IN[2].clipped && centerClipped) { + // If all control points are clipped, the surface cannot possibly be visible. + // Not entirely true, because displacement mapping can make them visible in the domain shader + // so we provide the user with a bias factor to avoid clipping too early + OUT.TessFactor[0] = OUT.TessFactor[1] = OUT.TessFactor[2] = 0; + } else { + // Camera based tessellation, per object. So very basic. + float3 CameraPosition = viewInv[3].xyz; + float LengthOp = length((CameraPosition - world[3].xyz)); + float DivOp = (TessellationRange / LengthOp); + float MaxOp = max(TessellationMin + DivOp, 1); + OUT.TessFactor[0] = OUT.TessFactor[1] = OUT.TessFactor[2] = MaxOp; + } + + // Inside tess factor is just the average of the edge factors + OUT.InsideTessFactor = (OUT.TessFactor[0] + OUT.TessFactor[1] + OUT.TessFactor[2]) / 3.0f; + + return OUT; +} + +//------------------------------------ +// domain shader +//------------------------------------ +// outputs the new vertices based on previous tessellation. +// also calculates new normals and uvs +// This domain shader applies contol point weighting to the barycentric coords produced by the FF tessellator +// If you wanted to do any vertex lighting, it would have to happen here. +[domain("tri")] +SHADERDATA DS(HSCONSTANTDATA HSIN, OutputPatch IN, float3 f3BarycentricCoords : SV_DomainLocation) { + SHADERDATA OUT = (SHADERDATA)0; + + // The barycentric coordinates + float fU = f3BarycentricCoords.x; + float fV = f3BarycentricCoords.y; + float fW = f3BarycentricCoords.z; + + // Precompute squares and squares * 3 + float fUU = fU * fU; + float fVV = fV * fV; + float fWW = fW * fW; + float fUU3 = fUU * 3.0f; + float fVV3 = fVV * 3.0f; + float fWW3 = fWW * 3.0f; + + // PN position: + float3 position = IN[0].worldPosition * fWW * fW + + IN[1].worldPosition * fUU * fU + + IN[2].worldPosition * fVV * fV + + IN[0].CP1 * fWW3 * fU + + IN[0].CP2 * fW * fUU3 + + IN[2].CP2 * fWW3 * fV + + IN[1].CP1 * fUU3 * fV + + IN[2].CP1 * fW * fVV3 + + IN[1].CP2 * fU * fVV3 + + HSIN.CPCenter * 6.0f * fW * fU * fV; + + // Flat position: + float3 flatPosition = IN[0].worldPosition * fW + IN[1].worldPosition * fU + IN[2].worldPosition * fV; + + // allow user to blend between PN tessellation and flat tessellation: + position = lerp(position, flatPosition, FlatTessellation); + + // Interpolate normal + float3 normal = IN[0].worldNormal * fW + IN[1].worldNormal * fU + IN[2].worldNormal * fV; + + // Normalize the interpolated normal + OUT.worldNormal = normalize(normal); + + // Compute tangent: + float3 tangent = IN[0].worldTangent.xyz * fW + IN[1].worldTangent.xyz * fU + IN[2].worldTangent.xyz * fV; + OUT.worldTangent.xyz = normalize(tangent.xyz); + + // Pass through the direction of the binormal as calculated in the vertex shader + OUT.worldTangent.w = IN[0].worldTangent.w; + + // Linear interpolate the texture coords + OUT.texCoord0 = IN[0].texCoord0 * fW + IN[1].texCoord0 * fU + IN[2].texCoord0 * fV; + OUT.texCoord1 = IN[0].texCoord1 * fW + IN[1].texCoord1 * fU + IN[2].texCoord1 * fV; + OUT.texCoord2 = IN[0].texCoord2 * fW + IN[1].texCoord2 * fU + IN[2].texCoord2 * fV; + + // apply displacement map (only when not rendering the Maya preview swatch): + if (UseDisplacementMap && !IsSwatchRender) { + // Fix Displacement Seams. + // we assume here that the displacement UVs is UVset 0. + // if this UVset index is changed, it should als be changed in the hull shader + // PN-AEN 18 with displacement UV seam fix + float2 displaceUV = pickTexcoord(DisplacementTexcoord, OUT.texCoord0, OUT.texCoord1, OUT.texCoord2); + float3 displacementUVW = PickDominant(float3(displaceUV, 0), fU, fV, fW, + float3(IN[0].dominantEdge.xy, 0), float3(IN[0].dominantEdge.zw, 0), + float3(IN[1].dominantEdge.xy, 0), float3(IN[1].dominantEdge.zw, 0), + float3(IN[2].dominantEdge.xy, 0), float3(IN[2].dominantEdge.zw, 0), + float3(IN[0].dominantVertex.xy, 0), + float3(IN[1].dominantVertex.xy, 0), + float3(IN[2].dominantVertex.xy, 0)); + + // We can still get cracks here because the world tangent and normal may be different for vertices on each side of the UV seam, + // because we do the tangent to world conversion, we get the same diplacement amount, but it results in different movement once converted to world space. + // And even a tiny difference between normal or tangent will cause large cracks. + float3 displacementNormal = PickDominant(OUT.worldNormal, + fU, fV, fW, + IN[0].dominantNormalE0, IN[0].dominantNormalE1, + IN[1].dominantNormalE0, IN[1].dominantNormalE1, + IN[2].dominantNormalE0, IN[2].dominantNormalE1, + IN[0].dominantNormalCorner, + IN[1].dominantNormalCorner, + IN[2].dominantNormalCorner); + + displacementNormal = normalize(displacementNormal); + + if (DisplacementModel == 1) { // Tangent Vector Displacement + float3 displacementTangent = PickDominant(OUT.worldTangent.xyz, fU, fV, fW, + IN[0].dominantTangentE0, IN[0].dominantTangentE1, + IN[1].dominantTangentE0, IN[1].dominantTangentE1, + IN[2].dominantTangentE0, IN[2].dominantTangentE1, + IN[0].dominantTangentCorner, + IN[1].dominantTangentCorner, + IN[2].dominantTangentCorner); + + displacementTangent = normalize(displacementTangent); + + float3 vecDisp = DisplacementTexture.SampleLevel(SamplerAnisoWrap, displacementUVW.xy, 0).xyz; + vecDisp -= DisplacementOffset; + + float3 Bn = cross(displacementNormal, displacementTangent); + float3x3 toWorld = float3x3(displacementTangent, Bn.xyz, displacementNormal); + + float3 VDMcoordSys = vecDisp.xzy; // Mudbox + if (VectorDisplacementCoordSys == 1) { + VDMcoordSys = vecDisp.xyz; // Maya or ZBrush + } + + float3 vecDispW = mul(VDMcoordSys, toWorld) * DisplacementHeight; + position.xyz += vecDispW; + } else { + // offset (-0.5) so that we can have negative displacement also + float offset = DisplacementTexture.SampleLevel(SamplerAnisoWrap, displacementUVW.xy, 0).x - DisplacementOffset; + position.xyz += displacementNormal * offset * DisplacementHeight; + } + } + + // Update World Position value for inside pixel shader: + OUT.worldPosition = position.xyz; + + // Transform model position with view-projection matrix + //OUT.position = float4(position.xyz, 1); // with geo + OUT.position = mul(float4(position.xyz, 1), viewPrj); // without geo + + return OUT; +} + +//------------------------------------ +// Geometry Shader +//------------------------------------ +// This is a sample Geo shader. Disabled in this shader, but left here for your reference. +// If you wish to enable it, search for 'with geo' in this shader for code to change. +[maxvertexcount(3)] // Declaration for the maximum number of vertices to create +void GS(triangle SHADERDATA IN[3], inout TriangleStream TriStream) { + SHADERDATA OUT; + + // quick test to see if geo also works: + for (int i = 0; i<3; ++i) { + OUT = IN[i]; + OUT.position = mul(mul(float4(OUT.position.xyz, 1), view), prj); + TriStream.Append(OUT); + } + TriStream.RestartStrip(); // end triangle +} +#endif + +void sampleMasks() { + +} + +//------------------------------------ +// pixel shader +//------------------------------------ +float4 f(SHADERDATA IN, bool FrontFace : SV_IsFrontFace) : SV_Target { +#ifdef _3DSMAX_ + FrontFace = !FrontFace; +#endif + // clip are early as possible + float2 opacityMaskUV = pickTexcoord(OpacityMaskTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + OpacityMaskClip(opacityMaskUV); + + float gammaCorrection = lerp(1.0, 2.2, LinearSpaceLighting); + + float3 N = normalize(IN.worldNormal.xyz); + if (flipBackfaceNormals) { + N = lerp(-N, N, FrontFace); + } + float3 Nw = N; + + // Tangent and BiNormal: + float3 T = normalize(IN.worldTangent.xyz); + float3 Bn = cross(N, T); + Bn *= IN.worldTangent.w; + + float4 diffuse = float4(1, 1, 1, 1); + if (UseDiffuseTexture) { + float2 diffuseUV = pickTexcoord(DiffuseTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float4 diffuseTextureSample = DiffuseTexture.Sample(SamplerAnisoWrap, diffuseUV); + + if (UseDiffuseTextureAlpha) { + diffuse.a = diffuseTextureSample.a; + } + + diffuse.rgb *= pow(diffuseTextureSample.rgb, gammaCorrection); + } + + float3 microNormal = float3(0, 0, 1); + if (UseNormalTexture) { + float3x3 toWorld = float3x3(T, Bn, N); + + float2 normalUV = pickTexcoord(NormalTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float3 NormalMap = NormalTexture.Sample(SamplerAnisoWrap, normalUV).xyz * 2.0 - 1.0; + float3 backupNormal = NormalMap; + + if (NormalCoordsysX > 0) + NormalMap.x = -NormalMap.x; + if (NormalCoordsysY > 0) + NormalMap.y = -NormalMap.y; + + NormalMap.xy *= NormalHeight; + + if (UseMicroNormalTexture) { + float2 normalUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + microNormal = MicroNormalTexture.Sample(SamplerAnisoWrap, normalUV * MicroScale).xyz * 2.0 - 1.0; + + microNormal.xy *= MicroNormalHeight; + NormalMap.xy += microNormal.xy; + } + + if (UseBlendTexture) { + float2 blendUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + + + + + + + } + NormalMap = mul(NormalMap.xyz, toWorld); + N = normalize(NormalMap); + } else { + if (UseMicroNormalTexture) { + float3x3 toWorld = float3x3(T, Bn, N); + + float2 normalUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + microNormal = MicroNormalTexture.Sample(SamplerAnisoWrap, normalUV * MicroScale).xyz * 2.0 - 1.0; + + microNormal.xy *= MicroNormalHeight; + microNormal = mul(microNormal.xyz, toWorld); + } + } + + diffuse.rgb *= DiffuseColor; + + float3 blurredNormal = lerp(N, Nw, NormalBlurring); + + float3 V = normalize(viewInv[3].xyz - IN.worldPosition.xyz); + + float4 specular = float4(0.028, 0.028, 0.028, 1); + specular.rgb *= SpecularColor; + + if (UseSpecularTexture) { + float2 opacityUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float4 SpecularTextureSample = SpecularTexture.Sample(SamplerAnisoWrap, opacityUV); + + specular.rgb *= pow(SpecularTextureSample.rgb, gammaCorrection); + + if (UseSpecularTextureAlpha) { + specular.a = SpecularTextureSample.a; + } + } + + float cavity = 1; + if (UseCavityTexture) { + float2 cavityUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float CavityTextureSample = CavityTexture.Sample(SamplerAnisoWrap, cavityUV); + + cavity = lerp(1, pow(CavityTextureSample, gammaCorrection), CavityAmount); + } + + float microCavity = 1; + if (UseMicroCavityTexture) { + float2 cavityUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float MicroCavityTextureSample = MicroCavityTexture.Sample(SamplerAnisoWrap, cavityUV * MicroScale); + + microCavity = lerp(1, pow(MicroCavityTextureSample, gammaCorrection), MicroCavityAmount); + } + + specular.rgb *= cavity * microCavity; // We apply cavity on the specular before it is sent to the fresnel + + float roughness = Roughness; + if (UseSpecularTextureAlpha) { + roughness *= specular.a; + } + + float scatteringRadius = 1; + if (UseScatteringRadiusTexture) { + float2 scatteringUV = pickTexcoord(DiffuseTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float4 scatteringRadiusTextureSample = ScatteringRadiusTexture.Sample(SamplerAnisoWrap, scatteringUV); + + scatteringRadius *= pow(scatteringRadiusTextureSample, gammaCorrection); + } + + // Opacity: + float opacity = saturate(diffuse.a * Opacity); + + // Occlusion: + float3 ambientOcclusion = float3(1, 1, 1); + if (UseAmbientOcclusionTexture) { + float2 aomapUV = pickTexcoord(OcclusionTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float3 aomapTextureSample = OcclusionTexture.Sample(SamplerAnisoWrap, aomapUV).rgb; + ambientOcclusion *= lerp(1, pow(aomapTextureSample.rgb, gammaCorrection), OcclusionAmount); + } + + float3 thickness = float3(1, 1, 1); + if (UseThicknessTexture) { + float2 thicknessUV = pickTexcoord(ThicknessTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + thickness = pow(BackScatteringThicknessTexture.Sample(SamplerAnisoWrap, thicknessUV), gammaCorrection).xyz; + } + + float3 skinOcclusion = coloredOcclusion(diffuse, ambientOcclusion); // Colored occlusion for skin + + float softenMask = 1.0f; + + float2 screenCoord = IN.screenCoord.xy / IN.screenCoord.w; + //float2 currentScreenSize = screenSize; // TO DO FIND A WAY TO GET SCREEN SIZE, MAYA BUG ? + float2 currentScreenSize = float2(1024, 512); + + // -------- + // LIGHTS: + // -------- + // future todo: Maya could pass light info in array so we can loop any number of lights. + + // light 0: + lightOut light0 = CalculateLight(light0Enable, light0Type, light0AttenScale, light0Pos, IN.worldPosition.xyz, + light0Color, light0Intensity, light0Dir, light0ConeAngle, light0FallOff, light0Matrix, + light0ShadowMap, light0ShadowOn, blurredNormal, N, diffuse, V, roughness, specular, + thickness, softenMask, gammaCorrection, opacity, ambientOcclusion, skinOcclusion, screenCoord, currentScreenSize, scatteringRadius); + + // light 1: + lightOut light1 = CalculateLight(light1Enable, light1Type, light1AttenScale, light1Pos, IN.worldPosition.xyz, + light1Color, light1Intensity, light1Dir, light1ConeAngle, light1FallOff, light1Matrix, + light1ShadowMap, light1ShadowOn, blurredNormal, N, diffuse, V, roughness, specular, + thickness, softenMask, gammaCorrection, opacity, ambientOcclusion, skinOcclusion, screenCoord, currentScreenSize, scatteringRadius); + + // light 2: + lightOut light2 = CalculateLight(light2Enable, light2Type, light2AttenScale, light2Pos, IN.worldPosition.xyz, + light2Color, light2Intensity, light2Dir, light2ConeAngle, light2FallOff, light2Matrix, + light2ShadowMap, light2ShadowOn, blurredNormal, N, diffuse, V, roughness, specular, + thickness, softenMask, gammaCorrection, opacity, ambientOcclusion, skinOcclusion, screenCoord, currentScreenSize, scatteringRadius); + + float3 lightTotal = light0.Color + light1.Color + light2.Color; + + + // ---------------------- + // IMAGE BASED LIGHTING + // ---------------------- + + // Specular IBL + float3 specularIBL = float3(0, 0, 0); + bool reflectMapUsed = UseSpecCubeIBL; + if (reflectMapUsed) { + int lod = 7; // Hard coded mip map level + + float3 reflectionVector = reflect(-V, N); + + reflectionVector = RotateVectorYaw(reflectionVector, SkyRotation); + reflectionVector = normalize(reflectionVector); + float NdotV = saturate(dot(N, V)); + float3 F = F_LagardeSchlick(specular, 1 - roughness, NdotV); + + specularIBL += SpecularCubeIBL.SampleLevel(CubeMapSampler, reflectionVector, lod * roughness).rgb * F; + } + + // Diffuse IBL + float3 diffuseIBL = float3(0, 0, 0); + bool useDiffuseIBL = UseDiffuseIBLMap; + if (useDiffuseIBL) { + // We use the world normal to sample the lighting texture + float3 diffuseIBLVec_High = N; + float3 diffuseIBLVec_Low = blurredNormal; + + diffuseIBLVec_High = RotateVectorYaw(diffuseIBLVec_High, SkyRotation); + diffuseIBLVec_High = normalize(diffuseIBLVec_High); + + diffuseIBLVec_Low = RotateVectorYaw(diffuseIBLVec_Low, SkyRotation); + diffuseIBLVec_Low = normalize(diffuseIBLVec_Low); + + float3 diffuseIBL_High = DiffuseCubeIBL.SampleLevel(CubeMapSampler, diffuseIBLVec_High, 0).rgb; + float3 diffuseIBL_Low = DiffuseCubeIBL.SampleLevel(CubeMapSampler, diffuseIBLVec_Low, 0).rgb; + + diffuseIBL = diffuseSkinIBL(float3(skinCoeffX, skinCoeffY, skinCoeffZ), diffuseIBL_High, diffuseIBL_Low); + } + + // ---------------------- + // FINAL COLOR AND ALPHA: + // ---------------------- + + float3 result = float3(0, 0, 0); + + result += diffuse * diffuseIBL * DiffuseIBLIntensity * skinOcclusion; + + result += specularIBL * SpecularIBLIntensity * specularOcclusion(N, V, ambientOcclusion); + + result += lightTotal; + + //result = N; + + // do gamma correction in shader: + if (!MayaFullScreenGamma) + result = pow(result, 1 / gammaCorrection); + + // final alpha: + float transparency = opacity; + transparency = saturate(transparency); // keep 0-1 range + + return float4(result, transparency); +} + + +#ifdef _MAYA_ +void Peel(SHADERDATA IN) { + float currZ = abs(mul(float4(IN.worldPosition, 1.0f), view).z); + + float4 Pndc = mul(float4(IN.worldPosition, 1.0f), viewPrj); + float2 UV = Pndc.xy / Pndc.w * float2(0.5f, -0.5f) + 0.5f; + float prevZ = transpDepthTexture.Sample(SamplerShadowDepth, UV).r; + float opaqZ = opaqueDepthTexture.Sample(SamplerShadowDepth, UV).r; + float bias = 0.00002f; + + if (currZ < prevZ * (1.0f + bias) || currZ > opaqZ * (1.0f - bias)) { + discard; + } +} + +float4 LinearDepth(SHADERDATA IN) { + return abs(mul(float4(IN.worldPosition, 1.0f), view).z); +} + +float4 DepthComplexity(float opacity) { + return opacity > 0.001f ? 1.0f : 0.0f; +} + +struct MultiOut2 { + float4 target0 : SV_Target0; + float4 target1 : SV_Target1; +}; + +MultiOut2 fTransparentPeel(SHADERDATA IN, bool FrontFace : SV_IsFrontFace) { + Peel(IN); + + MultiOut2 OUT; + OUT.target0 = f(IN, FrontFace); + OUT.target1 = LinearDepth(IN); + return OUT; +} + +MultiOut2 fTransparentPeelAndAvg(SHADERDATA IN, bool FrontFace : SV_IsFrontFace) { + Peel(IN); + + MultiOut2 OUT; + OUT.target0 = f(IN, FrontFace); + OUT.target1 = DepthComplexity(OUT.target0.w); + return OUT; +} + +MultiOut2 fTransparentWeightedAvg(SHADERDATA IN, bool FrontFace : SV_IsFrontFace) { + MultiOut2 OUT; + OUT.target0 = f(IN, FrontFace); + OUT.target1 = DepthComplexity(OUT.target0.w); + return OUT; +} + +//------------------------------------ +// wireframe pixel shader +//------------------------------------ +float4 fwire(SHADERDATA IN) : SV_Target { + return float4(0, 0, 1, 1); +} + + +//------------------------------------ +// pixel shader for shadow map generation +//------------------------------------ +//float4 ShadowMapPS( float3 Pw, float4x4 shadowViewProj ) +float4 ShadowMapPS(SHADERDATA IN) : SV_Target { + // clip as early as possible + float2 opacityMaskUV = pickTexcoord(OpacityMaskTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + OpacityMaskClip(opacityMaskUV); + + float4 Pndc = mul(float4(IN.worldPosition, 1.0f), viewPrj); + + // divide Z and W component from clip space vertex position to get final depth per pixel + float retZ = Pndc.z / Pndc.w; + + retZ += fwidth(retZ); + return retZ.xxxx; +} +#endif + +//----------------------------------- +// Objects without tessellation +//------------------------------------ +technique11 TessellationOFF < + bool overridesDrawState = false; // we do not supply our own render state settings + int isTransparent = 3; + // objects with clipped pixels need to be flagged as isTransparent to avoid the occluding underlying geometry since Maya renders the object with flat shading when computing depth + string transparencyTest = "Opacity < 1.0 || (UseDiffuseTexture && UseDiffuseTextureAlpha) || UseOpacityMaskTexture"; + // 'VariableNameAsAttributeName = false' can be used to tell Maya's DX11ShaderNode to use the UIName annotation string for the Maya attribute name instead of the shader variable name. + // When changing this option, the attribute names generated for the shader inside Maya will change and this can have the side effect that older scenes have their shader attributes reset to default. + // bool VariableNameAsAttributeName = false; + +#ifdef _MAYA_ + // Tells Maya that the effect supports advanced transparency algorithm, + // otherwise Maya would render the associated objects simply by alpha + // blending on top of other objects supporting advanced transparency + // when the viewport transparency algorithm is set to depth-peeling or + // weighted-average. + bool supportsAdvancedTransparency = true; +#endif +> +{ + pass p0 < string drawContext = "colorPass"; > { // tell maya during what draw context this shader should be active, in this case 'Color' + // even though overrideDrawState is false, we still set the pre-multiplied alpha state here in + // case Maya is using 'Depth Peeling' transparency algorithm + // This unfortunately won't solve sorting issues, but at least our object can draw transparent. + // If we don't set this, the object will always be opaque. + // In the future, hopefully ShaderOverride nodes can participate properly in Maya's Depth Peeling setup +#ifdef _MAYA_ + SetBlendState(PMAlphaBlending, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF); +#endif + SetVertexShader(CompileShader(vs_5_0, v())); + SetHullShader(NULL); + SetDomainShader(NULL); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, f())); + } + +#ifdef _MAYA_ + pass pTransparentPeel < string drawContext = "transparentPeel"; > { // Depth-peeling pass for depth-peeling transparency algorithm. + SetVertexShader(CompileShader(vs_5_0, v())); + SetHullShader(NULL); + SetDomainShader(NULL); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentPeel())); + } + + pass pTransparentPeelAndAvg < string drawContext = "transparentPeelAndAvg"; > { // Weighted-average pass for depth-peeling transparency algorithm. + SetVertexShader(CompileShader(vs_5_0, v())); + SetHullShader(NULL); + SetDomainShader(NULL); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentPeelAndAvg())); + } + + pass pTransparentWeightedAvg < string drawContext = "transparentWeightedAvg"; > { // Weighted-average algorithm. No peeling. + SetVertexShader(CompileShader(vs_5_0, v())); + SetHullShader(NULL); + SetDomainShader(NULL); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentWeightedAvg())); + } + + pass pShadow < string drawContext = "shadowPass"; > { + SetVertexShader(CompileShader(vs_5_0, v())); + SetHullShader(NULL); + SetDomainShader(NULL); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, ShadowMapPS())); + } +#endif +} + +#ifdef _SUPPORTTESSELLATION_ +//----------------------------------- +// Objects with tessellation +//------------------------------------ +// Vertex Index Buffer options: +// index_buffer_type: None; // no divergent normals and no displacement crack fix +// index_buffer_type: PNAEN9; // divergent normals crack fix; no displacement UV seam crack fix +// index_buffer_type: PNAEN18, // crack fix for divergent normals and UV seam displacement +technique11 TessellationON < + string index_buffer_type = "PNAEN18"; // tell Maya what type of index buffer we want. Must be unique name per generator + bool overridesDrawState = false; + int isTransparent = 3; + string transparencyTest = "Opacity < 1.0 || (UseDiffuseTexture && UseDiffuseTextureAlpha) || UseOpacityMaskTexture"; + bool supportsAdvancedTransparency = true; > { + pass p0 < string drawContext = "colorPass"; > { + SetBlendState(PMAlphaBlending, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF); + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); // without geo + //SetGeometryShader( CompileShader(gs_5_0, GS()) ); // with geo + SetPixelShader(CompileShader(ps_5_0, f())); + } + + pass pTransparentPeel < string drawContext = "transparentPeel";> { // Depth-peeling pass for depth-peeling transparency algorithm. + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentPeel())); + } + + pass pTransparentPeelAndAvg < string drawContext = "transparentPeelAndAvg"; > { // Weighted-average pass for depth-peeling transparency algorithm. + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentPeelAndAvg())); + } + + pass pTransparentWeightedAvg < string drawContext = "transparentWeightedAvg"; > { // Weighted-average algorithm. No peeling. + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentWeightedAvg())); + } + + pass pShadow < string drawContext = "shadowPass"; > { + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, ShadowMapPS())); + } +} + +//----------------------------------- +// Wireframe +//------------------------------------ +technique11 WireFrame < + string index_buffer_type = "PNAEN18"; + bool overridesDrawState = false; // since we only change the fillMode, it can remain on false. If we changed the blend state, it would have to be true + int isTransparent = 0; > { + pass p0 < string drawContext = "colorPass"; > { + SetRasterizerState(WireframeCullFront); + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); // without geo + //SetGeometryShader( CompileShader(gs_5_0, GS()) ); // with geo + SetPixelShader(CompileShader(ps_5_0, fwire())); + } +} +#endif diff --git a/data/shaders/dx11_shd_head.fx b/data/shaders/dx11_shd_head.fx new file mode 100644 index 0000000..9b38d5a --- /dev/null +++ b/data/shaders/dx11_shd_head.fx @@ -0,0 +1,4271 @@ +// Maya Skin shader made by Charles Greivelding 2014 + +//------------------------------------ +// Notes +//------------------------------------ +// Shader uses 'pre-multiplied alpha' as its render state and this Uber Shader is build to work in unison with that. +// Alternatively, in Maya, the dx11Shader node allows you to set your own render states by supplying the 'overridesDrawState' annotation in the technique +// You may find it harder to get proper transparency sorting if you choose to do so. + +// The technique annotation 'isTransparent' is used to tell Maya how treat the technique with respect to transparency. +// - If set to 0 the technique is always considered opaque +// - If set to 1 the technique is always considered transparent +// - If set to 2 the plugin will check if the parameter marked with the OPACITY semantic is less than 1.0 +// - If set to 3 the plugin will use the transparencyTest annotation to create a MEL procedure to perform the desired test. +// Maya will then render the object twice. Front faces follow by back faces. + +// For some objects you may need to switch the Transparency Algorithm to 'Depth Peeling' to avoid transparency issues. +// Models that require this usually have internal faces. + +//------------------------------------ +// Defines +//------------------------------------ +// how many mip map levels should Maya generate or load per texture. +// 0 means all possible levels +// some textures may override this value, but most textures will follow whatever we have defined here +// If you wish to optimize performance (at the cost of reduced quality), you can set NumberOfMipMaps below to 1 + +#define NumberOfMipMaps 0 +#define PI 3.1415926 +#define _3DSMAX_SPIN_MAX 99999 + +#ifndef _MAYA_ +#define _3DSMAX_ // at time of writing this shader, Nitrous driver did not have the _3DSMAX_ define set +#define _ZUP_ // Maya is Y up, 3dsMax is Z up +#endif + +#ifdef _MAYA_ +#define _SUPPORTTESSELLATION_ // at time of writing this shader, 3dsMax did not support tessellation +#endif + +//------------------------------------ +// State +//------------------------------------ +#ifdef _MAYA_ +RasterizerState WireframeCullFront { + CullMode = Front; + FillMode = WIREFRAME; +}; + +BlendState PMAlphaBlending { + AlphaToCoverageEnable = FALSE; + BlendEnable[0] = TRUE; + SrcBlend = ONE; + DestBlend = INV_SRC_ALPHA; + BlendOp = ADD; + SrcBlendAlpha = ONE; // Required for hardware frame render alpha channel + DestBlendAlpha = INV_SRC_ALPHA; + BlendOpAlpha = ADD; + RenderTargetWriteMask[0] = 0x0F; +}; +#endif + +//------------------------------------ +// Map Channels +//------------------------------------ +#ifdef _3DSMAX_ +int texcoord0 : Texcoord < + int Texcoord = 0; + int MapChannel = 1; + string UIWidget = "None"; +>; + +int texcoord1 : Texcoord < + int Texcoord = 1; + int MapChannel = 2; + string UIWidget = "None"; +>; + +int texcoord2 : Texcoord < + int Texcoord = 2; + int MapChannel = 3; + string UIWidget = "None"; +>; +#endif + +//------------------------------------ +// Samplers +//------------------------------------ +SamplerState CubeMapSampler { + Filter = ANISOTROPIC; + AddressU = Clamp; + AddressV = Clamp; + AddressW = Clamp; +}; + +SamplerState SamplerAnisoWrap { + Filter = ANISOTROPIC; + AddressU = Wrap; + AddressV = Wrap; +}; + +SamplerState SamplerAnisoClamp { + Filter = ANISOTROPIC; + AddressU = Clamp; + AddressV = Clamp; +}; + +SamplerState SamplerShadowDepth { + Filter = MIN_MAG_MIP_POINT; + AddressU = Border; + AddressV = Border; + BorderColor = float4(1.0f, 1.0f, 1.0f, 1.0f); +}; + +//------------------------------------ +// Textures +//------------------------------------ + +Texture2D LutTexture < + string UIGroup = "SubSurfaceScattering"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "SSS LUT Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 203; + int UVEditorOrder = 2; +>; + +Texture2D DitherTexture < + string UIGroup = "SubSurfaceScattering"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "SSS Dither Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 203; + int UVEditorOrder = 2; +>; + +// --------------------------------------------- +// Blend GROUP +// --------------------------------------------- + +bool UseBlendTexture < + string UIGroup = "Wrinkle mixing"; + string UIName = "Enable Wrinkle Mixing"; + int UIOrder = 919; +> = false; + +Texture2D animNormalMap_00 < + string UIGroup = "Animated Maps"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Wrinkle Map 00"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 948; + int UVEditorOrder = 2; +>; + +Texture2D animNormalMap_01 < + string UIGroup = "Animated Maps"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Wrinkle Map 01"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 949; + int UVEditorOrder = 2; +>; + +Texture2D animNormalMap_02 < + string UIGroup = "Animated Maps"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Wrinkle Map 02"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 950; + int UVEditorOrder = 2; +>; + + +Texture2D animColorMap_00 < + string UIGroup = "Animated Maps"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Blood Flow 00"; + string ResourceType = "2D"; + int UIOrder = 951; + int UVEditorOrder = 2; +>; + +Texture2D animColorMap_01 < + string UIGroup = "Animated Maps"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Blood Flow 01"; + string ResourceType = "2D"; + int UIOrder = 952; + int UVEditorOrder = 2; +>; + +Texture2D animColorMap_02 < + string UIGroup = "Animated Maps"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Blood Flow 02"; + string ResourceType = "2D"; + int UIOrder = 953; + int UVEditorOrder = 2; +>; + + +Texture2D maskChannel_00 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 00 Mask"; + string ResourceType = "2D"; + int UIOrder = 948; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_01 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 01 Mask"; + string ResourceType = "2D"; + int UIOrder = 949; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_02 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 02 Mask"; + string ResourceType = "2D"; + int UIOrder = 950; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_03 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 03 Mask"; + string ResourceType = "2D"; + int UIOrder = 951; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_04 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 04 Mask"; + string ResourceType = "2D"; + int UIOrder = 952; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_05 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 05 Mask"; + string ResourceType = "2D"; + int UIOrder = 953; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_06 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 06 Mask"; + string ResourceType = "2D"; + int UIOrder = 954; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_07 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 07 Mask"; + string ResourceType = "2D"; + int UIOrder = 955; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_08 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 08 Mask"; + string ResourceType = "2D"; + int UIOrder = 956; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_09 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 09 Mask"; + string ResourceType = "2D"; + int UIOrder = 957; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_10 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 10 Mask"; + string ResourceType = "2D"; + int UIOrder = 958; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_11 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 11 Mask"; + string ResourceType = "2D"; + int UIOrder = 959; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_12 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 12 Mask"; + string ResourceType = "2D"; + int UIOrder = 960; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_13 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 13 Mask"; + string ResourceType = "2D"; + int UIOrder = 961; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_14 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 14 Mask"; + string ResourceType = "2D"; + int UIOrder = 962; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_15 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 15 Mask"; + string ResourceType = "2D"; + int UIOrder = 963; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_16 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 16 Mask"; + string ResourceType = "2D"; + int UIOrder = 964; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_17 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 17 Mask"; + string ResourceType = "2D"; + int UIOrder = 965; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_18 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 18 Mask"; + string ResourceType = "2D"; + int UIOrder = 966; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_19 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 19 Mask"; + string ResourceType = "2D"; + int UIOrder = 967; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_20 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 20 Mask"; + string ResourceType = "2D"; + int UIOrder = 968; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_21 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 21 Mask"; + string ResourceType = "2D"; + int UIOrder = 969; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_22 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 22 Mask"; + string ResourceType = "2D"; + int UIOrder = 970; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_23 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 23 Mask"; + string ResourceType = "2D"; + int UIOrder = 971; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_24 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 24 Mask"; + string ResourceType = "2D"; + int UIOrder = 972; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_25 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 25 Mask"; + string ResourceType = "2D"; + int UIOrder = 973; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_26 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 26 Mask"; + string ResourceType = "2D"; + int UIOrder = 974; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_27 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 27 Mask"; + string ResourceType = "2D"; + int UIOrder = 975; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_28 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 28 Mask"; + string ResourceType = "2D"; + int UIOrder = 976; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_29 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 29 Mask"; + string ResourceType = "2D"; + int UIOrder = 977; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_30 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 30 Mask"; + string ResourceType = "2D"; + int UIOrder = 978; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_31 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 31 Mask"; + string ResourceType = "2D"; + int UIOrder = 979; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_32 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 32 Mask"; + string ResourceType = "2D"; + int UIOrder = 980; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_33 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 33 Mask"; + string ResourceType = "2D"; + int UIOrder = 981; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_34 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 34 Mask"; + string ResourceType = "2D"; + int UIOrder = 982; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_35 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 35 Mask"; + string ResourceType = "2D"; + int UIOrder = 983; + int UVEditorOrder = 2; +>; + +Texture2D maskChannel_36 < + string UIGroup = "Masks"; + string ResourceName = ""; + string UIWidget = "File Picker"; + string UIName = "Channel 36 Mask"; + string ResourceType = "2D"; + int UIOrder = 984; + int UVEditorOrder = 2; +>; + + +float maskWeight_00 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 00 Multiplier"; + float UIStep = 0.01; + int UIOrder = 954; +> = 0.0; + +float maskWeight_01 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 01 Multiplier"; + float UIStep = 0.01; + int UIOrder = 955; +> = 0.0; + +float maskWeight_02 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 02 Multiplier"; + float UIStep = 0.01; + int UIOrder = 956; +> = 0.0; + +float maskWeight_03 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 03 Multiplier"; + float UIStep = 0.01; + int UIOrder = 957; +> = 0.0; + +float maskWeight_04 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 04 Multiplier"; + float UIStep = 0.01; + int UIOrder = 958; +> = 0.0; + +float maskWeight_05 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 05 Multiplier"; + float UIStep = 0.01; + int UIOrder = 959; +> = 0.0; + +float maskWeight_06 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 06 Multiplier"; + float UIStep = 0.01; + int UIOrder = 960; +> = 0.0; + +float maskWeight_07 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 07 Multiplier"; + float UIStep = 0.01; + int UIOrder = 961; +> = 0.0; + +float maskWeight_08 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 08 Multiplier"; + float UIStep = 0.01; + int UIOrder = 962; +> = 0.0; + +float maskWeight_09 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 09 Multiplier"; + float UIStep = 0.01; + int UIOrder = 963; +> = 0.0; + +float maskWeight_10 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 10 Multiplier"; + float UIStep = 0.01; + int UIOrder = 964; +> = 0.0; + +float maskWeight_11 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 11 Multiplier"; + float UIStep = 0.01; + int UIOrder = 965; +> = 0.0; + +float maskWeight_12 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 12 Multiplier"; + float UIStep = 0.01; + int UIOrder = 966; +> = 0.0; + +float maskWeight_13 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 13 Multiplier"; + float UIStep = 0.01; + int UIOrder = 967; +> = 0.0; + +float maskWeight_14 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 14 Multiplier"; + float UIStep = 0.01; + int UIOrder = 968; +> = 0.0; + +float maskWeight_15 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 15 Multiplier"; + float UIStep = 0.01; + int UIOrder = 969; +> = 0.0; + +float maskWeight_16 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 16 Multiplier"; + float UIStep = 0.01; + int UIOrder = 970; +> = 0.0; + +float maskWeight_17 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 17 Multiplier"; + float UIStep = 0.01; + int UIOrder = 971; +> = 0.0; + +float maskWeight_18 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 18 Multiplier"; + float UIStep = 0.01; + int UIOrder = 972; +> = 0.0; + +float maskWeight_19 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 19 Multiplier"; + float UIStep = 0.01; + int UIOrder = 973; +> = 0.0; + +float maskWeight_20 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 20 Multiplier"; + float UIStep = 0.01; + int UIOrder = 974; +> = 0.0; + +float maskWeight_21 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 21 Multiplier"; + float UIStep = 0.01; + int UIOrder = 975; +> = 0.0; + +float maskWeight_22 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 22 Multiplier"; + float UIStep = 0.01; + int UIOrder = 976; +> = 0.0; + +float maskWeight_23 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 23 Multiplier"; + float UIStep = 0.01; + int UIOrder = 977; +> = 0.0; + +float maskWeight_24 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 24 Multiplier"; + float UIStep = 0.01; + int UIOrder = 978; +> = 0.0; + +float maskWeight_25 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 25 Multiplier"; + float UIStep = 0.01; + int UIOrder = 979; +> = 0.0; + +float maskWeight_26 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 26 Multiplier"; + float UIStep = 0.01; + int UIOrder = 980; +> = 0.0; + +float maskWeight_27 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 27 Multiplier"; + float UIStep = 0.01; + int UIOrder = 981; +> = 0.0; + +float maskWeight_28 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 28 Multiplier"; + float UIStep = 0.01; + int UIOrder = 982; +> = 0.0; + +float maskWeight_29 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 29 Multiplier"; + float UIStep = 0.01; + int UIOrder = 983; +> = 0.0; + +float maskWeight_30 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 30 Multiplier"; + float UIStep = 0.01; + int UIOrder = 984; +> = 0.0; + +float maskWeight_31 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 31 Multiplier"; + float UIStep = 0.01; + int UIOrder = 985; +> = 0.0; + +float maskWeight_32 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 32 Multiplier"; + float UIStep = 0.01; + int UIOrder = 986; +> = 0.0; + +float maskWeight_33 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 33 Multiplier"; + float UIStep = 0.01; + int UIOrder = 987; +> = 0.0; + +float maskWeight_34 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 34 Multiplier"; + float UIStep = 0.01; + int UIOrder = 988; +> = 0.0; + +float maskWeight_35 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 35 Multiplier"; + float UIStep = 0.01; + int UIOrder = 989; +> = 0.0; + +float maskWeight_36 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 36 Multiplier"; + float UIStep = 0.01; + int UIOrder = 990; +> = 0.0; + +float maskWeight_37 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 37 Multiplier"; + float UIStep = 0.01; + int UIOrder = 991; +> = 0.0; + +float maskWeight_38 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 38 Multiplier"; + float UIStep = 0.01; + int UIOrder = 992; +> = 0.0; + +float maskWeight_39 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 39 Multiplier"; + float UIStep = 0.01; + int UIOrder = 993; +> = 0.0; + +float maskWeight_40 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 40 Multiplier"; + float UIStep = 0.01; + int UIOrder = 994; +> = 0.0; + +float maskWeight_41 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 41 Multiplier"; + float UIStep = 0.01; + int UIOrder = 995; +> = 0.0; + +float maskWeight_42 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 42 Multiplier"; + float UIStep = 0.01; + int UIOrder = 996; +> = 0.0; + +float maskWeight_43 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 43 Multiplier"; + float UIStep = 0.01; + int UIOrder = 997; +> = 0.0; + +float maskWeight_44 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 44 Multiplier"; + float UIStep = 0.01; + int UIOrder = 998; +> = 0.0; + +float maskWeight_45 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 45 Multiplier"; + float UIStep = 0.01; + int UIOrder = 999; +> = 0.0; + +float maskWeight_46 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 46 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1000; +> = 0.0; + +float maskWeight_47 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 47 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1001; +> = 0.0; + +float maskWeight_48 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 48 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1002; +> = 0.0; + +float maskWeight_49 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 49 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1003; +> = 0.0; + +float maskWeight_50 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 50 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1004; +> = 0.0; + +float maskWeight_51 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 51 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1005; +> = 0.0; + +float maskWeight_52 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 52 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1006; +> = 0.0; + +float maskWeight_53 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 53 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1007; +> = 0.0; + +float maskWeight_54 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 54 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1008; +> = 0.0; + +float maskWeight_55 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 55 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1009; +> = 0.0; + +float maskWeight_56 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 56 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1010; +> = 0.0; + +float maskWeight_57 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 57 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1011; +> = 0.0; + +float maskWeight_58 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 58 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1012; +> = 0.0; + +float maskWeight_59 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 59 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1013; +> = 0.0; + +float maskWeight_60 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 60 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1014; +> = 0.0; + +float maskWeight_61 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 61 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1015; +> = 0.0; + +float maskWeight_62 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 62 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1016; +> = 0.0; + +float maskWeight_63 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 63 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1017; +> = 0.0; + +float maskWeight_64 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 64 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1018; +> = 0.0; + +float maskWeight_65 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 65 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1019; +> = 0.0; + +float maskWeight_66 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 66 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1020; +> = 0.0; + +float maskWeight_67 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 67 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1021; +> = 0.0; + +float maskWeight_68 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 68 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1022; +> = 0.0; + +float maskWeight_69 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 69 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1023; +> = 0.0; + +float maskWeight_70 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 70 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1024; +> = 0.0; + +float maskWeight_71 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 71 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1025; +> = 0.0; + +float maskWeight_72 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 72 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1026; +> = 0.0; + +float maskWeight_73 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 73 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1027; +> = 0.0; + +float maskWeight_74 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 74 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1028; +> = 0.0; + +float maskWeight_75 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 75 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1029; +> = 0.0; + +float maskWeight_76 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 76 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1030; +> = 0.0; + +float maskWeight_77 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 77 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1031; +> = 0.0; + +float maskWeight_78 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 78 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1032; +> = 0.0; + +float maskWeight_79 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 79 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1033; +> = 0.0; + +float maskWeight_80 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 80 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1034; +> = 0.0; + +float maskWeight_81 < + string UIGroup = "Multipliers"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + string UIName = "Channel 81 Multiplier"; + float UIStep = 0.01; + int UIOrder = 1035; +> = 0.0; + + + +Texture2D OcclusionTexture < + string UIGroup = "Occlusion"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Ambient Occlusion Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 401; + int UVEditorOrder = 2; +>; + +Texture2D ScatteringRadiusTexture < + string UIGroup = "SubSurfaceScattering"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "SSS Radius Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 209; + int UVEditorOrder = 2; +>; + +Texture2D CavityTexture < + string UIGroup = "Cavity"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Cavity Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 501; + int UVEditorOrder = 4; +>; + +Texture2D DiffuseTexture < + string UIGroup = "Diffuse"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Diffuse Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 201; + int UVEditorOrder = 1; +>; + +Texture2D SpecularTexture < + string UIGroup = "Specular"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Specular Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 302; + int UVEditorOrder = 4; +>; + +Texture2D NormalTexture < + string UIGroup = "Normal"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Normal Map"; + string ResourceType = "2D"; + int mipmaplevels = 0; // If mip maps exist in texture, Maya will load them. So user can pre-calculate and re-normalize mip maps for normal maps in .dds + int UIOrder = 601; + int UVEditorOrder = 5; +>; + +Texture2D MicroCavityTexture < + string UIGroup = "Micro Details"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Micro Cavity Map"; + string ResourceType = "2D"; + int mipmaplevels = 0; + int UIOrder = 701; + int UVEditorOrder = 5; +>; + +Texture2D MicroNormalTexture < + string UIGroup = "Micro Details"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Micro Normal Map"; + string ResourceType = "2D"; + int mipmaplevels = 0; + int UIOrder = 704; + int UVEditorOrder = 5; +>; + +#ifdef _SUPPORTTESSELLATION_ +Texture2D DisplacementTexture < + string UIGroup = "Tessellation and Displacement"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Displacement Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 902; + int UVEditorOrder = 8; +>; +#endif + +Texture2D BackScatteringThicknessTexture < + string UIGroup = "BackScattering"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Thickness Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 215; + int UVEditorOrder = 10; +>; + +Texture2D OpacityMaskTexture < + string UIGroup = "Opacity"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Opacity Mask"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 800; + int UVEditorOrder = 12; +>; + +TextureCube DiffuseCubeIBL < + string UIGroup = "IBL Settings"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Diffuse Cubemap"; + string ResourceType = "Cube"; + int mipmaplevels = 0; // Use (or load) max number of mip map levels so we can use blurring + int UIOrder = 108; + int UVEditorOrder = 10; +>; + +TextureCube SpecularCubeIBL : environment < + string UIGroup = "IBL Settings"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Specular Cubemap"; + string ResourceType = "Cube"; + int mipmaplevels = 0; + int UIOrder = 111; + int UVEditorOrder = 6; +>; + +//------------------------------------ +// Shadow Maps +//------------------------------------ +Texture2D light0ShadowMap : SHADOWMAP < + string Object = "Light 0"; // UI Group for lights, auto-closed + string UIWidget = "None"; + int UIOrder = 5010; +>; + +Texture2D light1ShadowMap : SHADOWMAP < + string Object = "Light 1"; + string UIWidget = "None"; + int UIOrder = 5020; +>; + +Texture2D light2ShadowMap : SHADOWMAP < + string Object = "Light 2"; + string UIWidget = "None"; + int UIOrder = 5030; +>; + +//------------------------------------ +// Internal depth textures for Maya depth-peeling transparency +//------------------------------------ +#ifdef _MAYA_ + +Texture2D transpDepthTexture : transpdepthtexture < + string UIWidget = "None"; +>; + +Texture2D opaqueDepthTexture : opaquedepthtexture < + string UIWidget = "None"; +>; + +#endif + +//------------------------------------ +// Per Frame parameters +//------------------------------------ +cbuffer UpdatePerFrame : register(b0) { + float4x4 viewInv : ViewInverse < string UIWidget = "None"; >; + float4x4 view : View < string UIWidget = "None"; >; + float4x4 prj : Projection < string UIWidget = "None"; >; + float4x4 viewPrj : ViewProjection < string UIWidget = "None"; >; + + // A shader may wish to do different actions when Maya is rendering the preview swatch (e.g. disable displacement) + // This value will be true if Maya is rendering the swatch + bool IsSwatchRender : MayaSwatchRender < string UIWidget = "None"; > = false; + float2 screenSize : ViewportPixelSize < string UIWidget = "None"; >; + + // If the user enables viewport gamma correction in Maya's global viewport rendering settings, the shader should not do gamma again + bool MayaFullScreenGamma : MayaGammaCorrection < string UIWidget = "None"; > = false; +} + + +//------------------------------------ +// Per Object parameters +//------------------------------------ +cbuffer UpdatePerObject : register(b1) { + float4x4 world : World < string UIWidget = "None"; >; + float4x4 worldIT : WorldInverseTranspose < string UIWidget = "None"; >; +#ifndef _SUPPORTTESSELLATION_ + float4x4 wvp : WorldViewProjection < string UIWidget = "None"; >; +#endif + +// --------------------------------------------- +// Lighting Settings GROUP +// --------------------------------------------- +bool LinearSpaceLighting < + string UIGroup = "Lighting Settings"; + string UIName = "Linear Space Lighting"; + int UIOrder = 100; +> = true; + +bool UseShadows < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string UIGroup = "Lighting Settings"; + string UIName = "Shadows"; + int UIOrder = 101; +#endif +> = true; + +float shadowMultiplier < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string UIGroup = "Lighting Settings"; + string UIWidget = "Slider"; + float UIMin = 0.000; + float UIMax = 1.000; + float UIStep = 0.001; + string UIName = "Shadow Strength"; + int UIOrder = 102; +#endif +> = { 1.0f }; + +// This offset allows you to fix any in-correct self shadowing caused by limited precision. +// This tends to get affected by scene scale and polygon count of the objects involved. +float shadowDepthBias : ShadowMapBias < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string UIGroup = "Lighting Settings"; + string UIWidget = "Slider"; + float UIMin = 0.000; + float UISoftMax = 10.000; + float UIStep = 0.001; + string UIName = "Shadow Bias"; + int UIOrder = 103; +#endif +> = { 0.01f }; + +// flips back facing normals to improve lighting for things like sheets of hair or leaves +bool flipBackfaceNormals < + string UIGroup = "Lighting Settings"; + string UIName = "Double Sided Lighting"; + int UIOrder = 104; +> = true; + +// -- light props are inserted here via UIOrder 20 - 49 + +// --------------------------------------------- +// IBL Settings GROUP +// --------------------------------------------- + +float SkyRotation < + string UIGroup = "IBL Settings"; + string UIName = "Sky Rotation"; + float UISoftMin = 0; + float UISoftMax = 360; + float UIMin = 0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 1; + int UIOrder = 105; + string UIWidget = "Slider"; +> = { 0.0f }; + +bool UseDiffuseIBLMap < + string UIGroup = "IBL Settings"; + string UIName = "Use Diffuse Cubemap"; + int UIOrder = 106; +> = false; + +float DiffuseIBLIntensity < + string UIGroup = "IBL Settings"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 2.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.001; + string UIName = "Diffuse IBL Intensity"; + int UIOrder = 107; +> = 1.0; + +bool UseSpecCubeIBL < + string UIGroup = "IBL Settings"; + string UIName = "Use Specular Cubemap"; + int UIOrder = 109; +> = false; + +float SpecularIBLIntensity < + string UIGroup = "IBL Settings"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 2.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.001; + string UIName = "Specular IBL Intensity"; + int UIOrder = 110; +> = 1.0; + +// --------------------------------------------- +// Diffuse GROUP +// --------------------------------------------- + +bool UseDiffuseTexture < + string UIGroup = "Diffuse"; + string UIName = "Use Diffuse Map"; + int UIOrder = 200; +> = false; + + +bool UseDiffuseTextureAlpha < + string UIGroup = "Diffuse"; + string UIName = "Use Diffuse Map Alpha"; + int UIOrder = 201; +> = false; + +float3 DiffuseColor : Diffuse < + string UIGroup = "Diffuse"; + string UIName = "Diffuse Color"; + string UIWidget = "ColorPicker"; + int UIOrder = 202; +> = { 1.0f, 1.0f, 1.0f }; + +// --------------------------------------------- +// SSS GROUP +// --------------------------------------------- + +float skinCoeffX < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Coeffient R"; + int UIOrder = 204; +> = 1.0; + +float skinCoeffY < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Coeffient G"; + int UIOrder = 205; +> = 0.5; + +float skinCoeffZ < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Coeffient B"; + int UIOrder = 206; +> = 0.25; + +float NormalBlurring < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Softness"; + int UIOrder = 207; +> = 0.25; + +bool UseScatteringRadiusTexture < + string UIGroup = "SubSurfaceScattering"; + string UIName = "Use SSS Radius Map"; + int UIOrder = 209; +> = false; + +float skinScattering < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Radius"; + int UIOrder = 210; +> = 0.25; + +float shadowBlur < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Shadow Blur"; + int UIOrder = 211; +> = 1.0; + +float shadowDither < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Shadow Dither"; + int UIOrder = 211; +> = 1.0; + +float shadowScattering < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Shadow Scattering"; + int UIOrder = 212; +> = 1.0; + +float shadowSaturation < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 4.0; + float UIMax = 4; + float UIStep = 0.1; + string UIName = "SSS Shadow Saturation"; + int UIOrder = 213; +> = 1.0; + +// --------------------------------------------- +// BackScattering GROUP +// --------------------------------------------- + +bool UseTranslucency < + string UIGroup = "BackScattering"; + string UIName = "Back Scattering"; + int UIOrder = 214; +> = false; + +bool UseThicknessTexture < + string UIGroup = "BackScattering"; + string UIName = "Use Thickness Map"; + int UIOrder = 216; +> = false; + +float skinScatteringRoughness < + string UIGroup = "BackScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "Back Scattering Width"; + int UIOrder = 217; +> = 1.0; + +/*float3 skinScatteringInnerColor < + string UIGroup = "BackScattering"; + string UIName = "Back Scattering Inner Color"; + string UIWidget = "ColorPicker"; + int UIOrder = 215; +> = {0.25f, 0.05f, 0.02f };*/ + +float3 skinScatteringOuterColor < + string UIGroup = "BackScattering"; + string UIName = "Back Scattering Color"; + string UIWidget = "ColorPicker"; + int UIOrder = 218; +> = { 0.25f, 0.05f, 0.02f }; + +float skinScatteringAmount < + string UIGroup = "BackScattering"; + float UIMin = 0.0; + float UISoftMax = 6.0; + float UIMax = 6; + float UIStep = 0.1; + string UIName = "Back Scattering Amount"; + int UIOrder = 219; +> = 1.0; + +float skinAmbientScatteringAmount < + string UIGroup = "BackScattering"; + float UIMin = 0.0; + float UISoftMax = 6.0; + float UIMax = 6; + float UIStep = 0.1; + string UIName = "Back Scattering Ambient Amount"; + int UIOrder = 220; +> = 1.0; + +/* float skinScatteringPlane < + string UIGroup = "BackScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "Back Scattering Far Plane"; + int UIOrder = 218; +> = 1.0;*/ + +// --------------------------------------------- +// Specular GROUP +// --------------------------------------------- + +bool UseSpecularTexture < + string UIGroup = "Specular"; + string UIName = "Use Specular Map"; + int UIOrder = 301; +> = false; + +bool UseSpecularTextureAlpha < + string UIGroup = "Specular"; + string UIName = "Use Roughness Map Alpha"; + int UIOrder = 301; +> = false; + +float3 SpecularColor : Specular < + string UIGroup = "Specular"; + string UIName = "Specular Color"; + string UIWidget = "ColorPicker"; + int UIOrder = 303; +> = { 1.0f, 1.0f, 1.0f }; + + +float LobeMix < + string UIGroup = "Specular"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1.0; + float UIStep = 0.01; + string UIName = "Lobe Mixing"; + int UIOrder = 304; +> = 0.75; + +float Roughness < + string UIGroup = "Specular"; + string UIWidget = "Slider"; + float UIMin = 0.01; + float UISoftMax = 1.0; + float UIMax = 1.0; + float UIStep = 0.01; + string UIName = "Roughness multiplier"; + int UIOrder = 305; +> = .2; + +// --------------------------------------------- +// Occlusion GROUP +// --------------------------------------------- + +bool UseAmbientOcclusionTexture < + string UIGroup = "Occlusion"; + string UIName = "Use Occlusion Map"; + int UIOrder = 400; +> = false; + +float OcclusionAmount < + string UIGroup = "Occlusion"; + string UIWidget = "Slider"; + float UIMin = 0.01; + float UISoftMax = 2.0; + float UIMax = 2.0; + float UIStep = 0.01; + string UIName = "Occlusion Amount"; + int UIOrder = 402; +> = 1.0; + +// --------------------------------------------- +// Cavity GROUP +// --------------------------------------------- + +bool UseCavityTexture < + string UIGroup = "Cavity"; + string UIName = "Use Cavity Map"; + int UIOrder = 500; +> = false; + +float CavityAmount < + string UIGroup = "Cavity"; + string UIWidget = "Slider"; + float UIMin = 0.01; + float UISoftMax = 2.0; + float UIMax = 2.0; + float UIStep = 0.01; + string UIName = "Cavity Amount"; + int UIOrder = 502; +> = 1.0; + +// --------------------------------------------- +// Normal GROUP +// --------------------------------------------- +bool UseNormalTexture < + string UIGroup = "Normal"; + string UIName = "Use Normal Map"; + int UIOrder = 600; +> = false; + +float NormalHeight < + string UIGroup = "Normal"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 5.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + string UIName = "Normal Height"; + int UIOrder = 603; +> = 1.0; + +bool SupportNonUniformScale < + string UIGroup = "Normal"; + string UIName = "Support Non-Uniform Scale"; + int UIOrder = 604; +> = true; + +int NormalCoordsysX < + string UIGroup = "Normal"; + string UIWidget = "Slider"; + float UIMin = 0; + float UIMax = 1; + float UIStep = 1; + string UIFieldNames = "Positive:Negative"; + string UIName = "Normal X (Red)"; + int UIOrder = 605; +> = 0; + +int NormalCoordsysY < + string UIGroup = "Normal"; + string UIWidget = "Slider"; + float UIMin = 0; + float UIMax = 1; + float UIStep = 1; + string UIFieldNames = "Positive:Negative"; + string UIName = "Normal Y (Green)"; + int UIOrder = 606; +> = 0; + +// --------------------------------------------- +// Micro Details GROUP +// --------------------------------------------- + +bool UseMicroCavityTexture < + string UIGroup = "Micro Details"; + string UIName = "Use Micro Cavity Map"; + int UIOrder = 700; +> = false; + +float MicroCavityAmount < + string UIGroup = "Micro Details"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 2.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + string UIName = "Micro Cavity Amount"; + int UIOrder = 702; +> = 1.0; + +bool UseMicroNormalTexture < + string UIGroup = "Micro Details"; + string UIName = "Use Micro Normal Map"; + int UIOrder = 703; +> = false; + +float MicroNormalHeight < + string UIGroup = "Micro Details"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 5.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + string UIName = "Micro Normal Height"; + int UIOrder = 705; +> = 1.0; + +float MicroScale < + string UIGroup = "Micro Details"; + string UIWidget = "Slider"; + float UIMin = 16.0; + float UISoftMax = 256.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + string UIName = "Micro Scale"; + int UIOrder = 706; +> = 32; + +// --------------------------------------------- +// Opacity GROUP +// --------------------------------------------- +float Opacity : OPACITY < + string UIGroup = "Opacity"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UIMax = 1.0; + float UIStep = 0.001; + string UIName = "Opacity"; + int UIOrder = 801; +> = 1.0; + +bool UseOpacityMaskTexture < + string UIGroup = "Opacity"; + string UIName = "Opacity Mask"; + int UIOrder = 802; +> = false; + +// at what value do we clip away pixels +float OpacityMaskBias < + string UIGroup = "Opacity"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UIMax = 1.0; + float UIStep = 0.001; + string UIName = "Opacity Mask Bias"; + int UIOrder = 803; +> = 0.1; + +#ifdef _SUPPORTTESSELLATION_ +// --------------------------------------------- +// Tessellation and Displacement GROUP +// --------------------------------------------- +int DisplacementModel < + string UIGroup = "Tessellation and Displacement"; + string UIName = "Displacement Model"; + string UIFieldNames = "Grayscale:Tangent Vector"; + float UIMin = 0; + float UIMax = 1; + float UIStep = 1; + int UIOrder = 900; +> = false; + +bool UseDisplacementMap < + string UIGroup = "Tessellation and Displacement"; + string UIName = "Displacement Map"; + int UIOrder = 901; +> = false; + +int VectorDisplacementCoordSys < + string UIGroup = "Tessellation and Displacement"; + string UIWidget = "Slider"; + string UIFieldNames = "Mudbox (XZY):Maya (XYZ)"; + string UIName = "Displacement Coordsys"; + float UIMin = 0; + float UIMax = 1; + float UIStep = 1; + int UIOrder = 903; +> = 0; + +float DisplacementHeight < + string UIGroup = "Tessellation and Displacement"; + float UISoftMin = 0.0; + float UISoftMax = 10.0; + string UIName = "Displacement Height"; + float UIMin = -(_3DSMAX_SPIN_MAX); + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.1; + int UIOrder = 904; +> = 0.5; + +// This allows you to control what the 'base' value for displacement is. +// When the offset value is 0.5, that means that a gray value (color: 128,128,128) will get 0 displacement. +// A value of 0 would then dent in. +// A value of 1 would then extrude. +float DisplacementOffset < + string UIGroup = "Tessellation and Displacement"; + float UISoftMin = -1.0; + float UISoftMax = 1.0; + float UIMin = -(_3DSMAX_SPIN_MAX); + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.1; + string UIName = "Displacement Offset"; + int UIOrder = 905; +> = 0.5; + +// This gives the artist control to prevent this shader from clipping away faces to quickly when displacement is actually keeping the faces on screen. +// This is also important for e.g. shadow map generation to make sure displaced vertices are not clipped out of the light's view +// See BBoxExtraScale for artist control over Maya clipping the entire object away when it thinks it leaves the view. +float DisplacementClippingBias < + string UIGroup = "Tessellation and Displacement"; + float UISoftMin = 0.0; + float UISoftMax = 99.0; + float UIMin = -(_3DSMAX_SPIN_MAX); + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.5; + string UIName = "Displacement Clipping Bias"; + int UIOrder = 906; +> = 5.0; + +// This gives the artist control to prevent maya from clipping away the entire object to fast in case displacement is used. +// Its semantic has to be BoundingBoxExtraScale +float BBoxExtraScale : BoundingBoxExtraScale < + string UIGroup = "Tessellation and Displacement"; + float UIMin = 1.0; + float UISoftMax = 10.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.5; + string UIName = "Bounding Box Extra Scale"; + int UIOrder = 907; +> = 1.0; + +float TessellationRange < + string UIGroup = "Tessellation and Displacement"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 999.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 1.0; + string UIName = "Tessellation Range"; + int UIOrder = 908; +> = { 0 }; + +float TessellationMin < + string UIGroup = "Tessellation and Displacement"; + float UIMin = 1.0; + float UISoftMax = 10.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.5; + string UIName = "Tessellation Minimum"; + int UIOrder = 909; +> = 3.0; + +float FlatTessellation < + string UIGroup = "Tessellation and Displacement"; + float UIMin = 0.0; + float UIMax = 1.0; + float UIStep = 0.1; + string UIName = "Flat Tessellation"; + int UIOrder = 910; +> = 0.0; +#endif + +// --------------------------------------------- +// UV assignment GROUP +// --------------------------------------------- +// Use the Surface Data Section to set your UVset names for each Texcoord. +// E.g. TexCoord1 = uv:UVset +// Then pick a Texcoord in the UV Section to use that UVset for a texture. + +int DiffuseTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Diffuse Map UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2002; +> = 0; + +int OcclusionTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Ambient Occlusion Map UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2003; +> = 1; + +int OpacityMaskTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Opacity Mask UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2005; +> = 0; + +int SpecularTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Specular Map UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2006; +> = 0; + +int NormalTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Normal Map UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2008; +> = 0; + +#ifdef _SUPPORTTESSELLATION_ +int DisplacementTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Displacement Map UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2010; +> = 0; +#endif + +int ThicknessTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Translucency Mask UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2011; +> = 0; +} //end UpdatePerObject cbuffer + +//------------------------------------ +// Light parameters +//------------------------------------ +cbuffer UpdateLights : register(b2) { +// --------------------------------------------- +// Light 0 GROUP +// --------------------------------------------- +// This value is controlled by Maya to tell us if a light should be calculated +// For example the artist may disable a light in the scene, or choose to see only the selected light +// This flag allows Maya to tell our shader not to contribute this light into the lighting +bool light0Enable : LIGHTENABLE < +string Object = "Light 0"; // UI Group for lights, auto-closed +string UIName = "Enable Light 0"; +int UIOrder = 20; +#ifdef _MAYA_ +> = false; // maya manages lights itself and defaults to no lights +#else +> = true; // in 3dsMax we should have the default light enabled +#endif + +// follows LightParameterInfo::ELightType +// spot = 2, point = 3, directional = 4, ambient = 5, +int light0Type : LIGHTTYPE < + string Object = "Light 0"; + string UIName = "Light 0 Type"; + string UIFieldNames = "None:Default:Spot:Point:Directional:Ambient"; + int UIOrder = 21; + float UIMin = 0; + float UIMax = 5; + float UIStep = 1; +> = 2; // default to spot so the cone angle etc work when "Use Shader Settings" option is used + +float3 light0Pos : POSITION < + string Object = "Light 0"; + string UIName = "Light 0 Position"; + string Space = "World"; + int UIOrder = 22; + int RefID = 0; // 3DSMAX +> = { 100.0f, 100.0f, 100.0f }; + +float3 light0Color : LIGHTCOLOR < + string Object = "Light 0"; +#ifdef _3DSMAX_ + int LightRef = 0; + string UIWidget = "None"; +#else + string UIName = "Light 0 Color"; + string UIWidget = "Color"; + int UIOrder = 23; +#endif +> = { 1.0f, 1.0f, 1.0f }; + +float light0Intensity : LIGHTINTENSITY < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 0"; + string UIName = "Light 0 Intensity"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 24; +#endif +> = { 1.0f }; + +float3 light0Dir : DIRECTION < + string Object = "Light 0"; + string UIName = "Light 0 Direction"; + string Space = "World"; + int UIOrder = 25; + int RefID = 0; // 3DSMAX +> = { 100.0f, 100.0f, 100.0f }; + +#ifdef _MAYA_ +float light0ConeAngle : HOTSPOT // In radians +#else +float light0ConeAngle : LIGHTHOTSPOT +#endif +< + string Object = "Light 0"; +#ifdef _3DSMAX_ + int LightRef = 0; + string UIWidget = "None"; +#else + string UIName = "Light 0 Cone Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 26; +#endif +> = { 0.46f }; + +#ifdef _MAYA_ +float light0FallOff : FALLOFF // In radians. Sould be HIGHER then cone angle or lighted area will invert +#else +float light0FallOff : LIGHTFALLOFF +#endif +< + string Object = "Light 0"; +#ifdef _3DSMAX_ + int LightRef = 0; + string UIWidget = "None"; +#else + string UIName = "Light 0 Penumbra Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 27; +#endif +> = { 0.7f }; + +float light0AttenScale : DECAYRATE < + string Object = "Light 0"; + string UIName = "Light 0 Decay"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 28; +> = { 0.0 }; + +bool light0ShadowOn : SHADOWFLAG < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 0"; + string UIName = "Light 0 Casts Shadow"; + string UIWidget = "None"; + int UIOrder = 29; +#endif +> = true; + +float4x4 light0Matrix : SHADOWMAPMATRIX < + string Object = "Light 0"; + string UIWidget = "None"; +>; + +// --------------------------------------------- +// Light 1 GROUP +// --------------------------------------------- +bool light1Enable : LIGHTENABLE < + string Object = "Light 1"; + string UIName = "Enable Light 1"; + int UIOrder = 30; +> = false; + +int light1Type : LIGHTTYPE < + string Object = "Light 1"; + string UIName = "Light 1 Type"; + string UIFieldNames = "None:Default:Spot:Point:Directional:Ambient"; + float UIMin = 0; + float UIMax = 5; + int UIOrder = 31; +> = 2; + +float3 light1Pos : POSITION < + string Object = "Light 1"; + string UIName = "Light 1 Position"; + string Space = "World"; + int UIOrder = 32; + int RefID = 1; // 3DSMAX +> = { -100.0f, 100.0f, 100.0f }; + +float3 light1Color : LIGHTCOLOR < + string Object = "Light 1"; +#ifdef _3DSMAX_ + int LightRef = 1; + string UIWidget = "None"; +#else + string UIName = "Light 1 Color"; + string UIWidget = "Color"; + int UIOrder = 33; +#endif +> = { 1.0f, 1.0f, 1.0f }; + +float light1Intensity : LIGHTINTENSITY < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 1"; + string UIName = "Light 1 Intensity"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 34; +#endif +> = { 1.0f }; + +float3 light1Dir : DIRECTION < + string Object = "Light 1"; + string UIName = "Light 1 Direction"; + string Space = "World"; + int UIOrder = 35; + int RefID = 1; // 3DSMAX +> = { 100.0f, 100.0f, 100.0f }; + +#ifdef _MAYA_ +float light1ConeAngle : HOTSPOT // In radians +#else +float light1ConeAngle : LIGHTHOTSPOT +#endif +< + string Object = "Light 1"; +#ifdef _3DSMAX_ + int LightRef = 1; + string UIWidget = "None"; +#else + string UIName = "Light 1 Cone Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 36; +#endif +> = { 45.0f }; + +#ifdef _MAYA_ +float light1FallOff : FALLOFF // In radians. Sould be HIGHER then cone angle or lighted area will invert +#else +float light1FallOff : LIGHTFALLOFF +#endif +< + string Object = "Light 1"; +#ifdef _3DSMAX_ + int LightRef = 1; + string UIWidget = "None"; +#else + string UIName = "Light 1 Penumbra Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 37; +#endif +> = { 0.0f }; + +float light1AttenScale : DECAYRATE < + string Object = "Light 1"; + string UIName = "Light 1 Decay"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 38; +> = { 0.0 }; + +bool light1ShadowOn : SHADOWFLAG < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 1"; + string UIName = "Light 1 Casts Shadow"; + string UIWidget = "None"; + int UIOrder = 39; +#endif +> = true; + +float4x4 light1Matrix : SHADOWMAPMATRIX < + string Object = "Light 1"; + string UIWidget = "None"; +>; + +// --------------------------------------------- +// Light 2 GROUP +// --------------------------------------------- +bool light2Enable : LIGHTENABLE < + string Object = "Light 2"; + string UIName = "Enable Light 2"; + int UIOrder = 40; +> = false; + +int light2Type : LIGHTTYPE < + string Object = "Light 2"; + string UIName = "Light 2 Type"; + string UIFieldNames = "None:Default:Spot:Point:Directional:Ambient"; + float UIMin = 0; + float UIMax = 5; + int UIOrder = 41; +> = 2; + +float3 light2Pos : POSITION < + string Object = "Light 2"; + string UIName = "Light 2 Position"; + string Space = "World"; + int UIOrder = 42; + int RefID = 2; // 3DSMAX +> = { 100.0f, 100.0f, -100.0f }; + +float3 light2Color : LIGHTCOLOR < + string Object = "Light 2"; +#ifdef _3DSMAX_ + int LightRef = 2; + string UIWidget = "None"; +#else + string UIName = "Light 2 Color"; + string UIWidget = "Color"; + int UIOrder = 43; +#endif +> = { 1.0f, 1.0f, 1.0f }; + +float light2Intensity : LIGHTINTENSITY < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 2"; + string UIName = "Light 2 Intensity"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 44; +#endif +> = { 1.0f }; + +float3 light2Dir : DIRECTION < + string Object = "Light 2"; + string UIName = "Light 2 Direction"; + string Space = "World"; + int UIOrder = 45; + int RefID = 2; // 3DSMAX +> = { 100.0f, 100.0f, 100.0f }; + +#ifdef _MAYA_ +float light2ConeAngle : HOTSPOT // In radians +#else +float light2ConeAngle : LIGHTHOTSPOT +#endif +< + string Object = "Light 2"; +#ifdef _3DSMAX_ + int LightRef = 2; + string UIWidget = "None"; +#else + string UIName = "Light 2 Cone Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 46; +#endif +> = { 45.0f }; + +#ifdef _MAYA_ +float light2FallOff : FALLOFF // In radians. Sould be HIGHER then cone angle or lighted area will invert +#else +float light2FallOff : LIGHTFALLOFF +#endif +< +string Object = "Light 2"; +#ifdef _3DSMAX_ + int LightRef = 2; + string UIWidget = "None"; +#else + string UIName = "Light 2 Penumbra Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 47; +#endif +> = { 0.0f }; + +float light2AttenScale : DECAYRATE < + string Object = "Light 2"; + string UIName = "Light 2 Decay"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 48; +> = { 0.0 }; + +bool light2ShadowOn : SHADOWFLAG < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 2"; + string UIName = "Light 2 Casts Shadow"; + string UIWidget = "None"; + int UIOrder = 49; +#endif +> = true; + +float4x4 light2Matrix : SHADOWMAPMATRIX < + string Object = "Light 2"; + string UIWidget = "None"; +>; + +} //end lights cbuffer + +//------------------------------------ +// Structs +//------------------------------------ +struct APPDATA { + float3 position : POSITION; + float2 texCoord0 : TEXCOORD0; + float2 texCoord1 : TEXCOORD1; + float2 texCoord2 : TEXCOORD2; + float3 normal : NORMAL; + float3 binormal : BINORMAL; + float3 tangent : TANGENT; +}; + +struct SHADERDATA { + float4 position : SV_Position; + float2 texCoord0 : TEXCOORD0; + float2 texCoord1 : TEXCOORD1; + float2 texCoord2 : TEXCOORD2; + float3 worldNormal : NORMAL; + float4 worldTangent : TANGENT; + float3 worldPosition : TEXCOORD3; + float4 screenCoord : TEXCOORD14; + +#ifdef _SUPPORTTESSELLATION_ + // Geometry generated control points: + // .worldPosition is CP0, so we don't need to store it again + float3 CP1 : TEXCOORD4; + float3 CP2 : TEXCOORD5; + + // PN-AEN with displacement fix: + float4 dominantEdge : TEXCOORD6; // both vertices of an edge + float2 dominantVertex : TEXCOORD7; // corner + + // Dominant normal and tangent for VDM crack fix: + // this could be compacted into less texcoords, but left as-is for readability + float3 dominantNormalE0 : TEXCOORD8; + float3 dominantNormalE1 : TEXCOORD9; + float3 dominantNormalCorner : TEXCOORD10; + + float3 dominantTangentE0 : TEXCOORD11; + float3 dominantTangentE1 : TEXCOORD12; + float3 dominantTangentCorner : TEXCOORD13; + + float clipped : CLIPPED; +#endif +}; + + +#ifdef _SUPPORTTESSELLATION_ +struct HSCONSTANTDATA { + float TessFactor[3] : SV_TessFactor; // tessellation amount for each edge of patch + float InsideTessFactor : SV_InsideTessFactor; // tessellation amount within a patch surface (would be float2 for quads) + float3 CPCenter : CENTER; // Geometry generated center control point +}; +#endif + +//------------------------------------ +// BRDF +//------------------------------------ + +float sqr(float x) { + return x*x; +} + +// [Beckmann 1963, "The scattering of electromagnetic waves from rough surfaces"] +float D_Beckmann(float Roughness, float NoH) { + float m = Roughness; + float m2 = m * m; + + float NdotH2 = sqr(NoH); + return exp((NdotH2 - 1) / (m2 * NdotH2)) / (PI * m2 * NdotH2 * NdotH2); +} + +// This function is from Nvidia's Human Head demo +float D_BeckmannNVIDIA(float m, float ndoth) { + float alpha = acos(ndoth); + float ta = tan(alpha); + float val = 1.0 / (m*m*pow(ndoth, 4.0)) * exp(-(ta*ta) / (m*m)); + return val; +} + +// Schlick 1994, "An Inexpensive BRDF Model for Physically-Based Rendering" +// Lagarde 2012, "Spherical Gaussian approximation for Blinn-Phong, Phong and Fresnel" +float3 F_Schlick(float3 SpecularColor, float LdotH) { + return SpecularColor + (1.0f - SpecularColor) * exp2((-5.55473 * LdotH - 6.98316) * LdotH); +} + +// Schlick 1994, "An Inexpensive BRDF Model for Physically-Based Rendering" +// Lagarde 2011, "Adopting a physically based shading model" +// Lagarde 2012, "Spherical Gaussian approximation for Blinn-Phong, Phong and Fresnel" +float3 F_LagardeSchlick(float3 SpecularColor, float Roughness, float NdotV) { + return SpecularColor + (max(1 - Roughness, SpecularColor) - SpecularColor) * exp2((-5.55473 * NdotV - 6.98316) * NdotV); +} + +float3 F_KelemenSzirmaykalos(float3 H, float3 V, float3 F0) { + float base = 1.0 - dot(V, H); + float exponential = pow(base, 5.0); + return exponential + F0 * (1.0 - exponential); +} + +float3 KelemenSzirmaykalos(float3 N, float3 L, float3 V, float roughness, float3 specular) { + float3 result = float3(0.0, 0.0, 0.0); + float NdotL = dot(N, L); + + if (NdotL > 0.0) { + float3 h = L + V; + float3 H = normalize(h); + float NdotH = dot(N, H); + float VdotH = dot(V, H); + float D = D_BeckmannNVIDIA(roughness, NdotH); + float3 F = F_Schlick(specular, VdotH); + float G = 1; + float3 specularDirect = max(D * G * F / dot(h, h), 0); + result = specularDirect * NdotL; // Specular is added for more tuning + } + return result; +} + +float3 PennerSkin(float3 skinCoef, float3 N, float3 L, float3 Nlow, float Curvature) { + float3 pennerX = lerp(N, Nlow, skinCoef.x); + float3 pennerY = lerp(N, Nlow, skinCoef.y); + float3 pennerZ = lerp(N, Nlow, skinCoef.z); + + float3 pennerNdotL = float3(dot(pennerX, L), dot(pennerY, L), dot(pennerZ, L)); + pennerNdotL = saturate(pennerNdotL * 0.5 + 0.5); + + float3 pennerlookUp; + pennerlookUp.r = LutTexture.Sample(SamplerAnisoClamp, float2(pennerNdotL.r, Curvature)).r; + pennerlookUp.g = LutTexture.Sample(SamplerAnisoClamp, float2(pennerNdotL.g, Curvature)).g; + pennerlookUp.b = LutTexture.Sample(SamplerAnisoClamp, float2(pennerNdotL.b, Curvature)).b; + + return pennerlookUp; +} + +float3 PennerSkinNoLUT(float3 skinCoef, float3 N, float3 L, float3 Nlow) { + float3 pennerX = lerp(N, Nlow, skinCoef.x); + float3 pennerY = lerp(N, Nlow, skinCoef.y); + float3 pennerZ = lerp(N, Nlow, skinCoef.z); + + float3 pennerNdotL = float3(dot(pennerX, L), dot(pennerY, L), dot(pennerZ, L)); + + float3 pennerlookUp; + pennerlookUp.r = saturate(pennerNdotL.r*(float3(1, 1, 1).r - skinCoef.r) + skinCoef.r) * (1 - skinCoef.r); + pennerlookUp.g = saturate(pennerNdotL.g*(float3(1, 1, 1).g - skinCoef.g) + skinCoef.g) * (1 - skinCoef.g); + pennerlookUp.b = saturate(pennerNdotL.b*(float3(1, 1, 1).b - skinCoef.b) + skinCoef.b) * (1 - skinCoef.b); + + return pennerlookUp; +} + +float3 diffuseSkinIBL(float3 skinCoef, float3 diffuseIBL_HighFreq, float3 diffuseIBL_LowFreq) { + return lerp(diffuseIBL_HighFreq, diffuseIBL_LowFreq, skinCoef); +} + +//------------------------------------ +// Functions +//------------------------------------ + +float4 ComputeScreenPos(float4 pos) { +#if UNITY_UV_STARTS_AT_TOP + float scale = -1.0; +#else + float scale = 1.0; +#endif + + float4 o = pos * 0.5f; + o.xy = float2(o.x, o.y*scale) + o.w; + o.zw = pos.zw; + + return o; +} + +// Occlusion taking into account the color of the texture multiplied to it +float3 coloredOcclusion(float3 color, float occlusion) { + float3 coloredOcclusion = lerp(float3(1.0f, 1.0f, 1.0f), color, (1 - occlusion)); + //color *= coloredOcclusion; + return coloredOcclusion; +} + +float specularOcclusion(float3 N, float3 V, float Occlusion) { + const float specularPow = 5.0; + float NdotV = dot(N, V); + float s = saturate(-0.3 + NdotV * NdotV); + + return lerp(pow(Occlusion, specularPow), 1.0, s); +} + +float2 pickTexcoord(int index, float2 t0, float2 t1, float2 t2) { + float2 tcoord = t0; + + if (index == 1) { + tcoord = t1; + } else if (index == 2) { + tcoord = t2; + } + + return tcoord; +} + +float3 RotateVectorYaw(float3 vec, float degreeOfRotation) { + float3 rotatedVec = vec; + float angle = radians(degreeOfRotation); + + rotatedVec.x = (cos(angle) * vec.x) - (sin(angle) * vec.z); + rotatedVec.z = (sin(angle) * vec.x) + (cos(angle) * vec.z); + + return rotatedVec; +} + +// Spot light cone +float lightConeangle(float coneAngle, float coneFalloff, float3 lightVec, float3 lightDir) { + // the cone falloff should be equal or bigger then the coneAngle or the light inverts + // this is added to make manually tweaking the spot settings easier. + if (coneFalloff < coneAngle) { + coneFalloff = coneAngle; + } + + float LdotDir = dot(normalize(lightVec), lightDir); + + // cheaper cone, no fall-off control would be: + // float cone = pow(saturate(LdotDir), 1 / coneAngle); + + // higher quality cone (more expensive): + float cone = smoothstep(cos(coneFalloff), cos(coneAngle), LdotDir); + + return cone; +} + +#define SHADOW_FILTER_TAPS_CNT 10 + +float2 SuperFilterTaps[SHADOW_FILTER_TAPS_CNT] < string UIWidget = "None"; > = { + { -0.84052f, -0.073954f }, + { -0.326235f, -0.40583f }, + { -0.698464f, 0.457259f }, + { -0.203356f, 0.6205847f }, + { 0.96345f, -0.194353f }, + { 0.473434f, -0.480026f }, + { 0.519454f, 0.767034f }, + { 0.185461f, -0.8945231f }, + { 0.507351f, 0.064963f }, + { -0.321932f, 0.5954349f } +}; + +static float4 kernel[25] = { + { 0.530605, 0.613514, 0.739601, 0 }, + { 0.000973794, 1.11862e-005, 9.43437e-007, -3 }, + { 0.00333804, 7.85443e-005, 1.2945e-005, -2.52083 }, + { 0.00500364, 0.00020094, 5.28848e-005, -2.08333 }, + { 0.00700976, 0.00049366, 0.000151938, -1.6875 }, + { 0.0094389, 0.00139119, 0.000416598, -1.33333 }, + { 0.0128496, 0.00356329, 0.00132016, -1.02083 }, + { 0.017924, 0.00711691, 0.00347194, -0.75 }, + { 0.0263642, 0.0119715, 0.00684598, -0.520833 }, + { 0.0410172, 0.0199899, 0.0118481, -0.333333 }, + { 0.0493588, 0.0367726, 0.0219485, -0.1875 }, + { 0.0402784, 0.0657244, 0.04631, -0.0833333 }, + { 0.0211412, 0.0459286, 0.0378196, -0.0208333 }, + { 0.0211412, 0.0459286, 0.0378196, 0.0208333 }, + { 0.0402784, 0.0657244, 0.04631, 0.0833333 }, + { 0.0493588, 0.0367726, 0.0219485, 0.1875 }, + { 0.0410172, 0.0199899, 0.0118481, 0.333333 }, + { 0.0263642, 0.0119715, 0.00684598, 0.520833 }, + { 0.017924, 0.00711691, 0.00347194, 0.75 }, + { 0.0128496, 0.00356329, 0.00132016, 1.02083 }, + { 0.0094389, 0.00139119, 0.000416598, 1.33333 }, + { 0.00700976, 0.00049366, 0.000151938, 1.6875 }, + { 0.00500364, 0.00020094, 5.28848e-005, 2.08333 }, + { 0.00333804, 7.85443e-005, 1.2945e-005, 2.52083 }, + { 0.000973794, 1.11862e-005, 9.43437e-007, 3 } +}; + + +static float2 kernelRandom[32] = { + { 0.254395, 0.385445 }, + { -0.139177, 0.571074 }, + { -0.453510, 0.962140 }, + { 0.482684, 0.346190 }, + { 0.889741, 0.724799 }, + { -0.661047, -0.137344 }, + { -0.193311, -0.313475 }, + { 0.363177, -0.960291 }, + { -0.225866, -0.654962 }, + { 0.407875, 0.431522 }, + { -0.543008, -0.992827 }, + { -0.878493, -0.896999 }, + { -0.641776, 0.130757 }, + { -0.785279, -0.015190 }, + { 0.469054, 0.248633 }, + { -0.820410, -0.562833 }, + { 0.174019, -0.618069 }, + { -0.906449, -0.275099 }, + { -0.655285, -0.956021 }, + { 0.453776, -0.085425 }, + { -0.430788, -0.089530 }, + { -0.587370, -0.851826 }, + { 0.149056, -0.474322 }, + { 0.228684, 0.321661 }, + { -0.668752, -0.829400 }, + { -0.729554, 0.438250 }, + { -0.467018, -0.252882 }, + { 0.090398, 0.618760 }, + { 0.741840, 0.516401 }, + { -0.983891, 0.248701 }, + { -0.162010, -0.714455 }, + { 0.308825, 0.787175 } +}; + +float shadowMapTexelSize < string UIWidget = "None"; > = { 0.00195313 }; // (1.0f / 512) + +// Shadows: +// Percentage-Closer Filtering +float3 lightShadow(float4x4 LightViewPrj, uniform Texture2D ShadowMapTexture, float3 VertexWorldPosition, float2 screenCoord, float skinRadius, float2 size) { + float4 dither = 2.0 * DitherTexture.SampleLevel(SamplerAnisoWrap, screenCoord.xy * size / 128, 0) - 1.0; + float2x2 rotationMatrix = float2x2(dither.x, dither.y, -dither.y, dither.x); + + float ditherShadow = 0; + float shadowColored = 0; + + float4 Pndc = mul(float4(VertexWorldPosition.xyz, 1.0), LightViewPrj); + Pndc.xyz /= Pndc.w; + + if (Pndc.x > -1.0f && Pndc.x < 1.0f && Pndc.y > -1.0f && Pndc.y < 1.0f && Pndc.z > 0.0f && Pndc.z < 1.0f) { + float2 uv = 0.5f * Pndc.xy + 0.5f; + uv = float2(uv.x, (1.0 - uv.y)); // maya flip Y + float z = Pndc.z - shadowDepthBias / Pndc.w; + + screenCoord.y = 1 - screenCoord.y; + + float shadowDepth = skinRadius; + shadowDepth *= 4.0; + + for (int i = 0; i < 32; ++i) { + float2 offset = kernelRandom[i] * shadowDepth * shadowMapTexelSize; + float2 ditherOffset = mul(offset, rotationMatrix); + ditherOffset = lerp(offset, ditherOffset, shadowDither); + float3 sample = z - ShadowMapTexture.SampleLevel(SamplerShadowDepth, uv + ditherOffset, 0).x; + + ditherShadow += (sample >= 0.0f) ? 0.0f : (1.0f / 32); + } + } + + return ditherShadow; +} + +float3 lightShadowSkin(float4x4 LightViewPrj, uniform Texture2D ShadowMapTexture, float3 VertexWorldPosition, float2 screenCoord, float skinRadius, float2 size, float2 dir) { + + float4 dither = 2.0 * DitherTexture.SampleLevel(SamplerAnisoWrap, screenCoord.xy * size / 128, 0) - 1.0; + float2x2 rotationMatrix = float2x2(dither.x, dither.y, -dither.y, dither.x); + + float ditherShadow = 0; + float3 shadowColored = float3(0, 0, 0); + + float4 Pndc = mul(float4(VertexWorldPosition.xyz, 1.0), LightViewPrj); + Pndc.xyz /= Pndc.w; + if (Pndc.x > -1.0f && Pndc.x < 1.0f && Pndc.y > -1.0f && Pndc.y < 1.0f && Pndc.z > 0.0f && Pndc.z < 1.0f) { + float2 uv = 0.5f * Pndc.xy + 0.5f; + uv = float2(uv.x, (1.0 - uv.y)); // maya flip Y + + float z = Pndc.z - shadowDepthBias / Pndc.w; + screenCoord.y = 1 - screenCoord.y; + + float shadowDepth = skinRadius; + shadowDepth *= 4.0; + + for (int i = 0; i < 25; ++i) { + float2 offset = kernel[i].a * dir * shadowDepth * shadowMapTexelSize; + offset = mul(offset, rotationMatrix); + float3 sample = z - ShadowMapTexture.SampleLevel(SamplerShadowDepth, uv + offset, 0).x; + ditherShadow = (sample >= 0.0f) ? 0.0f : 1.0f; + + shadowColored += ditherShadow * kernel[i].rgb; + } + } + + return shadowColored; +} + +#ifdef _SUPPORTTESSELLATION_ +// Pick dominant for crack free displacement (original function by Bryan Dudash, modified to support any float3) +float3 PickDominant(float3 vec, // vector to change + float U, float V, float W, // barycoords + float3 DE0A, float3 DE0B, // domimant edge 0 vertex A and B + float3 DE1A, float3 DE1B, // domimant edge 1 vertex A and B + float3 DE2A, float3 DE2B, // domimant edge 2 vertex A and B + float3 DV0, float3 DV1, float3 DV2) { // dominant corners + // Override the texture coordinates along the primitive edges and at the corners. + // Keep the original interpolated coords for the inner area of the primitive. + + float3 dominantVector = vec; + + float edgeThreshold = 0.0001f; + float edgeU = (U == 0) ? 1 : 0; + float edgeV = (V == 0) ? 1 : 0; + float edgeW = (W == 0) ? 1 : 0; + + float corner = ((edgeU + edgeV + edgeW) == 2) ? 1 : 0; // two are 0, means we are a corner + float edge = ((edgeU + edgeV + edgeW) == 1) ? 1 : 0; // one of them is 0, means we are an edge + float innerarea = ((edgeU + edgeV + edgeW) == 0) ? 1 : 0; // none are 0, means we are interior + + if (innerarea != 1) { + // Note: the order of the vertices/edges we choose here can be different per application + // and depend on how the index buffer was generated. + // These work for Maya with its PN-AEN18 primitive generator + if (corner) { + if (U > 1.0 - edgeThreshold) + dominantVector = DV1; + else if (V > 1.0 - edgeThreshold) + dominantVector = DV2; + else if (W > 1.0 - edgeThreshold) + dominantVector = DV0; + } else { + if (edgeU) + dominantVector = lerp(DE2A, DE2B, W); + else if (edgeV) + dominantVector = lerp(DE0A, DE0B, U); + else + dominantVector = lerp(DE1A, DE1B, V); + } + } + + return dominantVector; +} + +// outside of view? +float IsClipped(float4 clipPos) { + float W = clipPos.w + DisplacementClippingBias; // bias allows artist to control to early clipping due to displacement + // Test whether the position is entirely inside the view frustum. + return (-W <= clipPos.x && clipPos.x <= W && -W <= clipPos.y && clipPos.y <= W && -W <= clipPos.z && clipPos.z <= W) ? 0.0f : 1.0f; +} + +// Compute whether all three control points along the edge are outside of the view frustum. +// By doing this, we're ensuring that +// 1.0 means clipped, 0.0 means unclipped. +float ComputeClipping(float3 cpA, float3 cpB, float3 cpC) { + // Compute the projected position for each position, then check to see whether they are clipped. + float4 projPosA = mul(float4(cpA, 1), viewPrj), projPosB = mul(float4(cpB, 1), viewPrj), projPosC = mul(float4(cpC, 1), viewPrj); + return min(min(IsClipped(projPosA), IsClipped(projPosB)), IsClipped(projPosC)); +} + +// PN Triangles and PN-AEN control points: +float3 ComputeCP(float3 posA, float3 posB, float3 normA) { + return (2.0f * posA + posB - (dot((posB - posA), normA) * normA)) / 3.0f; +} +#endif + +// Clip pixel away when opacity mask is used +void OpacityMaskClip(float2 uv) { + if (UseOpacityMaskTexture) { + float OpacityMaskMap = OpacityMaskTexture.Sample(SamplerAnisoWrap, uv).x; + + // clip value when less then 0 for punch-through alpha. + clip(OpacityMaskMap < OpacityMaskBias ? -1 : 1); + } +} + + +// Calculate a light: +struct lightOut { + float Specular; + float3 Color; +}; + +lightOut CalculateLight(bool lightEnable, int lightType, float lightAtten, float3 lightPos, float3 vertWorldPos, + float3 lightColor, float lightIntensity, float3 lightDir, float lightConeAngle, float lightFallOff, float4x4 lightViewPrjMatrix, + uniform Texture2D lightShadowMap, bool lightShadowOn, float3 vertexNormal, float3 normal, float3 diffuseColorIn, + float3 eyeVec, float roughness, float3 specularColorIn, float3 thickness, float softenMask, + float gammaCorrection, float opacity, float3 ambientOcclusion, float3 skinOcclusion, float2 screenCoord, float2 size, float scatteringRadius) { + lightOut OUT = (lightOut)0; + + OUT.Specular = 0.0; + OUT.Color = float3(0, 0, 0); + + if (lightEnable) { + // For Maya, flip the lightDir: +#ifdef _MAYA_ + lightDir = -lightDir; +#endif + + bool isAmbientLight = (lightType == 5); + if (isAmbientLight) { + OUT.Color = diffuseColorIn * lightColor * lightIntensity; + OUT.Color.rgb *= ambientOcclusion; + return OUT; + } + + bool isDirectionalLight = (lightType == 4); + float3 lightVec = lerp(lightPos - vertWorldPos, lightDir, isDirectionalLight); + + float3 L = normalize(lightVec); + + // Diffuse: + float3 diffuseDirect = float3(0, 0, 0); + float3 scatter = float3(skinCoeffX, skinCoeffY, skinCoeffZ); + diffuseDirect = PennerSkin(scatter, normal, L, vertexNormal, 1 - (scatteringRadius*skinScattering)) * diffuseColorIn; + //diffuseDirect = PennerSkinNoLUT(scatter,normal,L, vertexNormal) * diffuseColorIn; + + // Specular: + float3 specularDirect = float3(0, 0, 0); + + float3 Lobe1 = KelemenSzirmaykalos(normal, L, eyeVec, roughness, specularColorIn); + float3 Lobe2 = KelemenSzirmaykalos(normal, L, eyeVec, roughness*0.5, specularColorIn); + + specularDirect = Lobe2 * LobeMix + Lobe1 * (1 - LobeMix); + + // Light Attenuation: + bool enableAttenuation = lightAtten > 0.0001f; + float attenuation = 1.0f; + if (!isDirectionalLight) { + attenuation = lerp(1.0, 1 / pow(length(lightVec), lightAtten), enableAttenuation); + } + + // Spot light Cone Angle: + float angle = 1; + if (lightType == 2) { + angle = lightConeangle(lightConeAngle, lightFallOff, lightVec, lightDir); + } + + // Shadows: + float shadow = 1; + float3 skinShadow = float3(1, 1, 1); + float3 softShadow = float3(1, 1, 1); + if (UseShadows && lightShadowOn) { + shadow = lightShadow(lightViewPrjMatrix, lightShadowMap, vertWorldPos, screenCoord, shadowBlur, size); + + skinShadow = LutTexture.Sample(SamplerAnisoClamp, float2(shadow * angle, 1 - shadowScattering)); + skinShadow = lerp(dot(float3(0.33, 0.59, 0.11), skinShadow), skinShadow, shadowSaturation); + skinShadow = lerp(skinShadow, 1, (shadow* angle)*(shadow* angle)*(shadow* angle)); + } + + float3 lightAttenuation = lightIntensity * angle * attenuation * lightColor; + + diffuseDirect *= lightIntensity * skinShadow * attenuation * lightColor; + specularDirect *= lightAttenuation * shadow; + + float3 backScattering = float3(0, 0, 0); + if (UseTranslucency) { + half backRoughness = (1 - skinScatteringRoughness) * 128; + float3 viewScattering = exp2(saturate(dot(eyeVec, -(L + (normal * 0.01)))) * backRoughness - backRoughness) * skinScatteringAmount; + float3 lightScattering = saturate(dot(-L, normal)*0.5 + 0.5) * skinAmbientScatteringAmount; + + //float3 IBLScattering = diffuseIBL; + backScattering = (viewScattering + lightScattering) * lightAttenuation * shadow * thickness; + + float3 profile = skinScatteringOuterColor * backScattering; + backScattering = profile * skinScatteringAmount; + + + /*float scale = 2e4 * (1.0 - skinScatteringAmount) / backRoughness; + + float4 shrinkedPos = float4(vertWorldPos - 0.005 * vertexNormal, 1.0); + + float4 shadowPosition = mul(shrinkedPos, lightViewPrjMatrix); + + float d1 = lightShadowMap.Sample(SamplerShadowDepth, shadowPosition.xy / shadowPosition.w); // 'd1' has a range of 0..1 + + float d2 = shadowPosition.z; // 'd2' has a range of 0..'lightFarPlane' + d1 *= skinScatteringPlane*shadowPosition.w; // So we scale 'd1' accordingly: + float d = scale * abs(d1 - d2); + + float dd = -d * d; + float3 profile = float3(0.233, 0.455, 0.649) * exp(dd / 0.0064) + + float3(0.1, 0.336, 0.344) * exp(dd / 0.0484) + + float3(0.118, 0.198, 0.0) * exp(dd / 0.187) + + float3(0.113, 0.007, 0.007) * exp(dd / 0.567) + + float3(0.358, 0.004, 0.0) * exp(dd / 1.99) + + float3(0.078, 0.0, 0.0) * exp(dd / 7.41); + backScattering = profile * saturate((0.3 + dot(L, -vertexNormal)) / 1.3) * thickness * diffuseColorIn; */ + } + + OUT.Color += diffuseDirect * skinOcclusion; + OUT.Color *= opacity; + OUT.Color += specularDirect * ambientOcclusion + backScattering; + + // Output specular and rim for opacity: + // OUT.Specular = dot(saturate(specularColor), float3(0.3f, 0.6f, 0.1f)); + } // end if light enabled + + return OUT; +} + +//------------------------------------ +// vertex shader with tessellation +//------------------------------------ +// take inputs from 3d-app +// vertex animation/skinning would happen here +SHADERDATA vt(APPDATA IN) { + SHADERDATA OUT = (SHADERDATA)0; + + // we pass vertices in world space + float4 worldPos = mul(float4(IN.position, 1), world); + OUT.worldPosition.xyz = worldPos.xyz; + +#ifdef _SUPPORTTESSELLATION_ + OUT.position = worldPos; +#else + OUT.position = float4(IN.position.xyz, 1); +#endif + + OUT.screenCoord = mul(float4(OUT.position.xyz, 1), viewPrj); + + // Pass through texture coordinates + // flip Y for Maya +#ifdef _MAYA_ + OUT.texCoord0 = float2(IN.texCoord0.x, (1.0 - IN.texCoord0.y)); + OUT.texCoord1 = float2(IN.texCoord1.x, (1.0 - IN.texCoord1.y)); + OUT.texCoord2 = float2(IN.texCoord2.x, (1.0 - IN.texCoord2.y)); +#else + OUT.texCoord0 = IN.texCoord0; + OUT.texCoord1 = IN.texCoord1; + OUT.texCoord2 = IN.texCoord2; +#endif + + // output normals in world space: + if (!SupportNonUniformScale) { + OUT.worldNormal = normalize(mul(IN.normal, (float3x3)world)); + } else { + OUT.worldNormal = normalize(mul(IN.normal, (float3x3)worldIT)); + } + + // output tangent in world space: + if (!SupportNonUniformScale) { + OUT.worldTangent.xyz = normalize(mul(IN.tangent, (float3x3)world)); + } else { + OUT.worldTangent.xyz = normalize(mul(IN.tangent, (float3x3)worldIT)); + } + + // store direction for normal map: + OUT.worldTangent.w = 1; + if (dot(cross(IN.normal.xyz, IN.tangent.xyz), IN.binormal.xyz) < 0.0) { + OUT.worldTangent.w = -1; + } + + return OUT; +} + + +//------------------------------------ +// vertex shader without tessellation +//------------------------------------ +SHADERDATA v(APPDATA IN) { + SHADERDATA OUT = vt(IN); + + // If we don't use tessellation, pass vertices in clip space: +#ifdef _SUPPORTTESSELLATION_ + OUT.position = mul(float4(OUT.position.xyz, 1), viewPrj); +#else + OUT.position = mul(float4(IN.position, 1), wvp); +#endif + + return OUT; +} + +#ifdef _SUPPORTTESSELLATION_ +//------------------------------------ +// hull shader +//------------------------------------ +// executed once per control point. +// control points can be considered the original vertices of the mesh +// outputs a control point +// run parallel with hull constant function +[domain("tri")] +[partitioning("fractional_odd")] +[outputtopology("triangle_cw")] +[patchconstantfunc("HS_Constant")] +[outputcontrolpoints(3)] +[maxtessfactor(64.0)] + +// PN-AEN without displacement fix: +// SHADERDATA HS( InputPatch IN, uint index : SV_OutputControlPointID, uint patchID : SV_PrimitiveID ) + +// PN Triangles, no crack fixes: +// SHADERDATA HS( InputPatch IN, uint index : SV_OutputControlPointID, uint patchID : SV_PrimitiveID ) + + +// PN-AEN and displacement fix +// the index buffer is made up as follows: +// the triangle vertices index (int3) // PNAEN9 and PNAEN18 +// the 3 adjacent edges vertices index (3 * int2) // PNAEN9 and PNAEN18 +// the 3 dominant edges vertices index (3 * int2) // PNAEN18 +// the dominant position vertices index (int3) // PNAEN18 +SHADERDATA HS(InputPatch IN, uint index : SV_OutputControlPointID, uint patchID : SV_PrimitiveID) { + SHADERDATA OUT = (SHADERDATA)0; + + // copy everything first: + OUT = IN[index]; + + // Compute the next output control point ID so we know which edge we're on. + const uint nextIndex = index < 2 ? index + 1 : 0; // (index + 1) % 3 + + // PN-AEN 9 and 18: + const uint neighborIndex = 3 + 2 * index; + const uint neighborNextIndex = neighborIndex + 1; + float3 myCP, neighborCP; + + // Calculate original PN control points and neighbors'. Then average. + myCP = ComputeCP(IN[index].worldPosition, IN[nextIndex].worldPosition, IN[index].worldNormal); + neighborCP = ComputeCP(IN[neighborIndex].worldPosition, IN[neighborNextIndex].worldPosition, IN[neighborIndex].worldNormal); + OUT.CP1 = (myCP + neighborCP) / 2; + + myCP = ComputeCP(IN[nextIndex].worldPosition, IN[index].worldPosition, IN[nextIndex].worldNormal); + neighborCP = ComputeCP(IN[neighborNextIndex].worldPosition, IN[neighborIndex].worldPosition, IN[neighborNextIndex].worldNormal); + OUT.CP2 = (myCP + neighborCP) / 2; + + // PN Triangles only would be: + // OUT.CP1 = ComputeCP( IN[index].worldPosition, IN[nextIndex].worldPosition, IN[index].worldNormal); + // OUT.CP2 = ComputeCP( IN[nextIndex].worldPosition, IN[index].worldPosition, IN[nextIndex].worldNormal); + + // Clipping: + OUT.clipped = ComputeClipping(OUT.worldPosition, OUT.CP1, OUT.CP2); + + // PN-AEN discontinuity code for displacement UVs: + const uint dominantEdgeIndex = 9 + 2 * index; + const uint dominantEdgeNextIndex = dominantEdgeIndex + 1; + const uint dominantVertexIndex = 15 + index; + + // Note: the order of the vertices/edges we choose here can be different per application and + // depend on how the index buffer was generated. + // These work for Maya with its PN-AEN18 primitive generator + float2 dominantEdgeUV = pickTexcoord(DisplacementTexcoord, IN[dominantEdgeIndex].texCoord0, IN[dominantEdgeIndex].texCoord1, IN[dominantEdgeIndex].texCoord2); + float2 dominantEdgeNextUV = pickTexcoord(DisplacementTexcoord, IN[dominantEdgeNextIndex].texCoord0, IN[dominantEdgeNextIndex].texCoord1, IN[dominantEdgeNextIndex].texCoord2); + float2 dominantVertexUV = pickTexcoord(DisplacementTexcoord, IN[dominantVertexIndex].texCoord0, IN[dominantVertexIndex].texCoord1, IN[dominantVertexIndex].texCoord2); + + OUT.dominantEdge = float4(dominantEdgeNextUV, dominantEdgeUV); + OUT.dominantVertex = dominantVertexUV; + + // VDM dominant normal and tangent for displacement crack fix: + OUT.dominantNormalE0 = IN[dominantEdgeNextIndex].worldNormal.xyz; + OUT.dominantNormalE1 = IN[dominantEdgeIndex].worldNormal.xyz; + OUT.dominantNormalCorner = IN[dominantVertexIndex].worldNormal.xyz; + + OUT.dominantTangentE0 = IN[dominantEdgeNextIndex].worldTangent.xyz; + OUT.dominantTangentE1 = IN[dominantEdgeIndex].worldTangent.xyz; + OUT.dominantTangentCorner = IN[dominantVertexIndex].worldTangent.xyz; + + return OUT; +} + +//------------------------------------ +// Hull shader constant function +//------------------------------------ +// executed once per patch +// outputs user defined data per patch and tessellation factor +// calculates control points for vertex and normal and passes to domain +// This hull shader passes the tessellation factors through to the HW tessellator, +// run parallel with hull function +HSCONSTANTDATA HS_Constant(const OutputPatch IN, uint patchID : SV_PrimitiveID) { + HSCONSTANTDATA OUT = (HSCONSTANTDATA)0; + + // future todo: + // triangle is on silhouette? + // triangle is facing camera? If facing backwards, reduce tessellation + // triangle lies in high frequency area of displacement map (density-based tessellation)? + + // Now setup the PNTriangle control points... + // Center control point + float3 f3E = (IN[0].CP1 + IN[0].CP2 + IN[1].CP1 + IN[1].CP2 + IN[2].CP1 + IN[2].CP2) / 6.0f; + float3 f3V = (IN[0].worldPosition + IN[1].worldPosition + IN[2].worldPosition) / 3.0f; + OUT.CPCenter = f3E + ((f3E - f3V) / 2.0f); + + // Clipping: + float4 centerViewPos = mul(float4(OUT.CPCenter, 1), viewPrj); + bool centerClipped = IsClipped(centerViewPos); + + if (IN[0].clipped && IN[1].clipped && IN[2].clipped && centerClipped) { + // If all control points are clipped, the surface cannot possibly be visible. + // Not entirely true, because displacement mapping can make them visible in the domain shader + // so we provide the user with a bias factor to avoid clipping too early + OUT.TessFactor[0] = OUT.TessFactor[1] = OUT.TessFactor[2] = 0; + } else { + // Camera based tessellation, per object. So very basic. + float3 CameraPosition = viewInv[3].xyz; + float LengthOp = length((CameraPosition - world[3].xyz)); + float DivOp = (TessellationRange / LengthOp); + float MaxOp = max(TessellationMin + DivOp, 1); + OUT.TessFactor[0] = OUT.TessFactor[1] = OUT.TessFactor[2] = MaxOp; + } + + // Inside tess factor is just the average of the edge factors + OUT.InsideTessFactor = (OUT.TessFactor[0] + OUT.TessFactor[1] + OUT.TessFactor[2]) / 3.0f; + + return OUT; +} + +//------------------------------------ +// domain shader +//------------------------------------ +// outputs the new vertices based on previous tessellation. +// also calculates new normals and uvs +// This domain shader applies contol point weighting to the barycentric coords produced by the FF tessellator +// If you wanted to do any vertex lighting, it would have to happen here. +[domain("tri")] +SHADERDATA DS(HSCONSTANTDATA HSIN, OutputPatch IN, float3 f3BarycentricCoords : SV_DomainLocation) { + SHADERDATA OUT = (SHADERDATA)0; + + // The barycentric coordinates + float fU = f3BarycentricCoords.x; + float fV = f3BarycentricCoords.y; + float fW = f3BarycentricCoords.z; + + // Precompute squares and squares * 3 + float fUU = fU * fU; + float fVV = fV * fV; + float fWW = fW * fW; + float fUU3 = fUU * 3.0f; + float fVV3 = fVV * 3.0f; + float fWW3 = fWW * 3.0f; + + // PN position: + float3 position = IN[0].worldPosition * fWW * fW + + IN[1].worldPosition * fUU * fU + + IN[2].worldPosition * fVV * fV + + IN[0].CP1 * fWW3 * fU + + IN[0].CP2 * fW * fUU3 + + IN[2].CP2 * fWW3 * fV + + IN[1].CP1 * fUU3 * fV + + IN[2].CP1 * fW * fVV3 + + IN[1].CP2 * fU * fVV3 + + HSIN.CPCenter * 6.0f * fW * fU * fV; + + // Flat position: + float3 flatPosition = IN[0].worldPosition * fW + IN[1].worldPosition * fU + IN[2].worldPosition * fV; + + // allow user to blend between PN tessellation and flat tessellation: + position = lerp(position, flatPosition, FlatTessellation); + + // Interpolate normal + float3 normal = IN[0].worldNormal * fW + IN[1].worldNormal * fU + IN[2].worldNormal * fV; + + // Normalize the interpolated normal + OUT.worldNormal = normalize(normal); + + // Compute tangent: + float3 tangent = IN[0].worldTangent.xyz * fW + IN[1].worldTangent.xyz * fU + IN[2].worldTangent.xyz * fV; + OUT.worldTangent.xyz = normalize(tangent.xyz); + + // Pass through the direction of the binormal as calculated in the vertex shader + OUT.worldTangent.w = IN[0].worldTangent.w; + + // Linear interpolate the texture coords + OUT.texCoord0 = IN[0].texCoord0 * fW + IN[1].texCoord0 * fU + IN[2].texCoord0 * fV; + OUT.texCoord1 = IN[0].texCoord1 * fW + IN[1].texCoord1 * fU + IN[2].texCoord1 * fV; + OUT.texCoord2 = IN[0].texCoord2 * fW + IN[1].texCoord2 * fU + IN[2].texCoord2 * fV; + + // apply displacement map (only when not rendering the Maya preview swatch): + if (UseDisplacementMap && !IsSwatchRender) { + // Fix Displacement Seams. + // we assume here that the displacement UVs is UVset 0. + // if this UVset index is changed, it should als be changed in the hull shader + // PN-AEN 18 with displacement UV seam fix + float2 displaceUV = pickTexcoord(DisplacementTexcoord, OUT.texCoord0, OUT.texCoord1, OUT.texCoord2); + float3 displacementUVW = PickDominant(float3(displaceUV, 0), fU, fV, fW, + float3(IN[0].dominantEdge.xy, 0), float3(IN[0].dominantEdge.zw, 0), + float3(IN[1].dominantEdge.xy, 0), float3(IN[1].dominantEdge.zw, 0), + float3(IN[2].dominantEdge.xy, 0), float3(IN[2].dominantEdge.zw, 0), + float3(IN[0].dominantVertex.xy, 0), + float3(IN[1].dominantVertex.xy, 0), + float3(IN[2].dominantVertex.xy, 0)); + + // We can still get cracks here because the world tangent and normal may be different for vertices on each side of the UV seam, + // because we do the tangent to world conversion, we get the same diplacement amount, but it results in different movement once converted to world space. + // And even a tiny difference between normal or tangent will cause large cracks. + float3 displacementNormal = PickDominant(OUT.worldNormal, + fU, fV, fW, + IN[0].dominantNormalE0, IN[0].dominantNormalE1, + IN[1].dominantNormalE0, IN[1].dominantNormalE1, + IN[2].dominantNormalE0, IN[2].dominantNormalE1, + IN[0].dominantNormalCorner, + IN[1].dominantNormalCorner, + IN[2].dominantNormalCorner); + + displacementNormal = normalize(displacementNormal); + + if (DisplacementModel == 1) { // Tangent Vector Displacement + float3 displacementTangent = PickDominant(OUT.worldTangent.xyz, fU, fV, fW, + IN[0].dominantTangentE0, IN[0].dominantTangentE1, + IN[1].dominantTangentE0, IN[1].dominantTangentE1, + IN[2].dominantTangentE0, IN[2].dominantTangentE1, + IN[0].dominantTangentCorner, + IN[1].dominantTangentCorner, + IN[2].dominantTangentCorner); + + displacementTangent = normalize(displacementTangent); + + float3 vecDisp = DisplacementTexture.SampleLevel(SamplerAnisoWrap, displacementUVW.xy, 0).xyz; + vecDisp -= DisplacementOffset; + + float3 Bn = cross(displacementNormal, displacementTangent); + float3x3 toWorld = float3x3(displacementTangent, Bn.xyz, displacementNormal); + + float3 VDMcoordSys = vecDisp.xzy; // Mudbox + if (VectorDisplacementCoordSys == 1) { + VDMcoordSys = vecDisp.xyz; // Maya or ZBrush + } + + float3 vecDispW = mul(VDMcoordSys, toWorld) * DisplacementHeight; + position.xyz += vecDispW; + } else { + // offset (-0.5) so that we can have negative displacement also + float offset = DisplacementTexture.SampleLevel(SamplerAnisoWrap, displacementUVW.xy, 0).x - DisplacementOffset; + position.xyz += displacementNormal * offset * DisplacementHeight; + } + } + + // Update World Position value for inside pixel shader: + OUT.worldPosition = position.xyz; + + // Transform model position with view-projection matrix + //OUT.position = float4(position.xyz, 1); // with geo + OUT.position = mul(float4(position.xyz, 1), viewPrj); // without geo + + return OUT; +} + +//------------------------------------ +// Geometry Shader +//------------------------------------ +// This is a sample Geo shader. Disabled in this shader, but left here for your reference. +// If you wish to enable it, search for 'with geo' in this shader for code to change. +[maxvertexcount(3)] // Declaration for the maximum number of vertices to create +void GS(triangle SHADERDATA IN[3], inout TriangleStream TriStream) { + SHADERDATA OUT; + + // quick test to see if geo also works: + for (int i = 0; i<3; ++i) { + OUT = IN[i]; + OUT.position = mul(mul(float4(OUT.position.xyz, 1), view), prj); + TriStream.Append(OUT); + } + TriStream.RestartStrip(); // end triangle +} +#endif + +void sampleMasks() { + +} + +//------------------------------------ +// pixel shader +//------------------------------------ +float4 f(SHADERDATA IN, bool FrontFace : SV_IsFrontFace) : SV_Target { +#ifdef _3DSMAX_ + FrontFace = !FrontFace; +#endif + // clip are early as possible + float2 opacityMaskUV = pickTexcoord(OpacityMaskTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + OpacityMaskClip(opacityMaskUV); + + float gammaCorrection = lerp(1.0, 2.2, LinearSpaceLighting); + + float3 N = normalize(IN.worldNormal.xyz); + if (flipBackfaceNormals) { + N = lerp(-N, N, FrontFace); + } + float3 Nw = N; + + // Tangent and BiNormal: + float3 T = normalize(IN.worldTangent.xyz); + float3 Bn = cross(N, T); + Bn *= IN.worldTangent.w; + + float4 diffuse = float4(1, 1, 1, 1); + if (UseDiffuseTexture) { + float2 diffuseUV = pickTexcoord(DiffuseTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float4 diffuseTextureSample = DiffuseTexture.Sample(SamplerAnisoWrap, diffuseUV); + + if (UseDiffuseTextureAlpha) { + diffuse.a = diffuseTextureSample.a; + } + + diffuse.rgb *= pow(diffuseTextureSample.rgb, gammaCorrection); + } + + float3 microNormal = float3(0, 0, 1); + if (UseNormalTexture) { + float3x3 toWorld = float3x3(T, Bn, N); + + float2 normalUV = pickTexcoord(NormalTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float3 NormalMap = NormalTexture.Sample(SamplerAnisoWrap, normalUV).xyz * 2.0 - 1.0; + float3 backupNormal = NormalMap; + + if (NormalCoordsysX > 0) + NormalMap.x = -NormalMap.x; + if (NormalCoordsysY > 0) + NormalMap.y = -NormalMap.y; + + NormalMap.xy *= NormalHeight; + + if (UseMicroNormalTexture) { + float2 normalUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + microNormal = MicroNormalTexture.Sample(SamplerAnisoWrap, normalUV * MicroScale).xyz * 2.0 - 1.0; + + microNormal.xy *= MicroNormalHeight; + NormalMap.xy += microNormal.xy; + } + + if (UseBlendTexture) { + float2 blendUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + + float3 animNormalSample_00 = animNormalMap_00.Sample(SamplerAnisoWrap, blendUV).xyz * 2.0 - 1.0; + if (NormalCoordsysY > 0) { + animNormalSample_00.y = -animNormalSample_00.y; + } + if (NormalCoordsysX > 0) { + animNormalSample_00.x = -animNormalSample_00.x; + } + float3 animNormalDelta_00 = animNormalSample_00 - NormalMap; + float3 animNormalSample_01 = animNormalMap_01.Sample(SamplerAnisoWrap, blendUV).xyz * 2.0 - 1.0; + if (NormalCoordsysY > 0) { + animNormalSample_01.y = -animNormalSample_01.y; + } + if (NormalCoordsysX > 0) { + animNormalSample_01.x = -animNormalSample_01.x; + } + float3 animNormalDelta_01 = animNormalSample_01 - NormalMap; + float3 animNormalSample_02 = animNormalMap_02.Sample(SamplerAnisoWrap, blendUV).xyz * 2.0 - 1.0; + if (NormalCoordsysY > 0) { + animNormalSample_02.y = -animNormalSample_02.y; + } + if (NormalCoordsysX > 0) { + animNormalSample_02.x = -animNormalSample_02.x; + } + float3 animNormalDelta_02 = animNormalSample_02 - NormalMap; + + float3 animColorDelta_00 = (pow(animColorMap_00.Sample(SamplerAnisoWrap, blendUV).xyz, gammaCorrection)) - diffuse; + float3 animColorDelta_01 = (pow(animColorMap_01.Sample(SamplerAnisoWrap, blendUV).xyz, gammaCorrection)) - diffuse; + float3 animColorDelta_02 = (pow(animColorMap_02.Sample(SamplerAnisoWrap, blendUV).xyz, gammaCorrection)) - diffuse; + + float maskChannelVal_00 = maskChannel_00.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_01 = maskChannel_01.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_02 = maskChannel_02.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_03 = maskChannel_03.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_04 = maskChannel_04.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_05 = maskChannel_05.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_06 = maskChannel_06.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_07 = maskChannel_07.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_08 = maskChannel_08.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_09 = maskChannel_09.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_10 = maskChannel_10.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_11 = maskChannel_11.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_12 = maskChannel_12.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_13 = maskChannel_13.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_14 = maskChannel_14.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_15 = maskChannel_15.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_16 = maskChannel_16.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_17 = maskChannel_17.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_18 = maskChannel_18.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_19 = maskChannel_19.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_20 = maskChannel_20.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_21 = maskChannel_21.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_22 = maskChannel_22.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_23 = maskChannel_23.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_24 = maskChannel_24.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_25 = maskChannel_25.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_26 = maskChannel_26.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_27 = maskChannel_27.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_28 = maskChannel_28.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_29 = maskChannel_29.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_30 = maskChannel_30.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_31 = maskChannel_31.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_32 = maskChannel_32.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_33 = maskChannel_33.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_34 = maskChannel_34.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_35 = maskChannel_35.Sample(SamplerAnisoWrap, blendUV); + float maskChannelVal_36 = maskChannel_36.Sample(SamplerAnisoWrap, blendUV); + + NormalMap.xy += animNormalDelta_00 * maskWeight_47 * maskChannelVal_36 + + animNormalDelta_00 * maskWeight_15 * maskChannelVal_05 + + animNormalDelta_00 * maskWeight_13 * maskChannelVal_04 + + animNormalDelta_00 * maskWeight_46 * maskChannelVal_35 + + animNormalDelta_00 * maskWeight_73 * maskChannelVal_06 + + animNormalDelta_00 * maskWeight_11 * maskChannelVal_03 + + animNormalDelta_00 * maskWeight_65 * maskChannelVal_11 + + animNormalDelta_00 * maskWeight_75 * maskChannelVal_07 + + animNormalDelta_00 * maskWeight_67 * maskChannelVal_12 + + animNormalDelta_00 * maskWeight_09 * maskChannelVal_02 + + animNormalDelta_00 * maskWeight_49 * maskChannelVal_34 + + animNormalDelta_00 * maskWeight_71 * maskChannelVal_10 + + animNormalDelta_00 * maskWeight_48 * maskChannelVal_33 + + animNormalDelta_00 * maskWeight_23 * maskChannelVal_14 + + animNormalDelta_00 * maskWeight_69 * maskChannelVal_09 + + animNormalDelta_00 * maskWeight_18 * maskChannelVal_00 + + animNormalDelta_00 * maskWeight_22 * maskChannelVal_01 + + animNormalDelta_00 * maskWeight_77 * maskChannelVal_08 + + animNormalDelta_00 * maskWeight_19 * maskChannelVal_13 + + animNormalDelta_01 * maskWeight_07 * maskChannelVal_18 + + animNormalDelta_01 * maskWeight_03 * maskChannelVal_16 + + animNormalDelta_01 * maskWeight_81 * maskChannelVal_22 + + animNormalDelta_01 * maskWeight_79 * maskChannelVal_21 + + animNormalDelta_01 * maskWeight_01 * maskChannelVal_15 + + animNormalDelta_01 * maskWeight_05 * maskChannelVal_17 + + animNormalDelta_01 * maskWeight_63 * maskChannelVal_20 + + animNormalDelta_01 * maskWeight_37 * maskChannelVal_23 + + animNormalDelta_01 * maskWeight_61 * maskChannelVal_19 + + animNormalDelta_01 * maskWeight_39 * maskChannelVal_24 + + animNormalDelta_02 * maskWeight_59 * maskChannelVal_34 + + animNormalDelta_02 * maskWeight_35 * maskChannelVal_30 + + animNormalDelta_02 * maskWeight_54 * maskChannelVal_35 + + animNormalDelta_02 * maskWeight_58 * maskChannelVal_36 + + animNormalDelta_02 * maskWeight_29 * maskChannelVal_29 + + animNormalDelta_02 * maskWeight_55 * maskChannelVal_33 + + animNormalDelta_02 * maskWeight_28 * maskChannelVal_27 + + animNormalDelta_02 * maskWeight_33 * maskChannelVal_26 + + animNormalDelta_02 * maskWeight_27 * maskChannelVal_25 + + animNormalDelta_02 * maskWeight_34 * maskChannelVal_28 + + animNormalDelta_02 * maskWeight_41 * maskChannelVal_31 + + animNormalDelta_02 * maskWeight_51 * maskChannelVal_32; + + diffuse.rgb += animColorDelta_00 * maskWeight_20 * maskChannelVal_01 + + animColorDelta_00 * maskWeight_70 * maskChannelVal_10 + + animColorDelta_00 * maskWeight_43 * maskChannelVal_36 + + animColorDelta_00 * maskWeight_66 * maskChannelVal_12 + + animColorDelta_00 * maskWeight_45 * maskChannelVal_34 + + animColorDelta_00 * maskWeight_12 * maskChannelVal_04 + + animColorDelta_00 * maskWeight_14 * maskChannelVal_05 + + animColorDelta_00 * maskWeight_44 * maskChannelVal_33 + + animColorDelta_00 * maskWeight_42 * maskChannelVal_35 + + animColorDelta_00 * maskWeight_16 * maskChannelVal_00 + + animColorDelta_00 * maskWeight_74 * maskChannelVal_07 + + animColorDelta_00 * maskWeight_64 * maskChannelVal_11 + + animColorDelta_00 * maskWeight_68 * maskChannelVal_09 + + animColorDelta_00 * maskWeight_10 * maskChannelVal_03 + + animColorDelta_00 * maskWeight_08 * maskChannelVal_02 + + animColorDelta_00 * maskWeight_72 * maskChannelVal_06 + + animColorDelta_00 * maskWeight_21 * maskChannelVal_14 + + animColorDelta_00 * maskWeight_76 * maskChannelVal_08 + + animColorDelta_00 * maskWeight_17 * maskChannelVal_13 + + animColorDelta_01 * maskWeight_78 * maskChannelVal_21 + + animColorDelta_01 * maskWeight_60 * maskChannelVal_19 + + animColorDelta_01 * maskWeight_80 * maskChannelVal_22 + + animColorDelta_01 * maskWeight_06 * maskChannelVal_18 + + animColorDelta_01 * maskWeight_04 * maskChannelVal_17 + + animColorDelta_01 * maskWeight_62 * maskChannelVal_20 + + animColorDelta_01 * maskWeight_38 * maskChannelVal_24 + + animColorDelta_01 * maskWeight_36 * maskChannelVal_23 + + animColorDelta_01 * maskWeight_02 * maskChannelVal_16 + + animColorDelta_01 * maskWeight_00 * maskChannelVal_15 + + animColorDelta_02 * maskWeight_30 * maskChannelVal_26 + + animColorDelta_02 * maskWeight_52 * maskChannelVal_35 + + animColorDelta_02 * maskWeight_32 * maskChannelVal_30 + + animColorDelta_02 * maskWeight_26 * maskChannelVal_29 + + animColorDelta_02 * maskWeight_24 * maskChannelVal_25 + + animColorDelta_02 * maskWeight_56 * maskChannelVal_36 + + animColorDelta_02 * maskWeight_25 * maskChannelVal_27 + + animColorDelta_02 * maskWeight_57 * maskChannelVal_34 + + animColorDelta_02 * maskWeight_53 * maskChannelVal_33 + + animColorDelta_02 * maskWeight_31 * maskChannelVal_28 + + animColorDelta_02 * maskWeight_50 * maskChannelVal_32 + + animColorDelta_02 * maskWeight_40 * maskChannelVal_31; + + } + NormalMap = mul(NormalMap.xyz, toWorld); + N = normalize(NormalMap); + } else { + if (UseMicroNormalTexture) { + float3x3 toWorld = float3x3(T, Bn, N); + + float2 normalUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + microNormal = MicroNormalTexture.Sample(SamplerAnisoWrap, normalUV * MicroScale).xyz * 2.0 - 1.0; + + microNormal.xy *= MicroNormalHeight; + microNormal = mul(microNormal.xyz, toWorld); + } + } + + diffuse.rgb *= DiffuseColor; + + float3 blurredNormal = lerp(N, Nw, NormalBlurring); + + float3 V = normalize(viewInv[3].xyz - IN.worldPosition.xyz); + + float4 specular = float4(0.028, 0.028, 0.028, 1); + specular.rgb *= SpecularColor; + + if (UseSpecularTexture) { + float2 opacityUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float4 SpecularTextureSample = SpecularTexture.Sample(SamplerAnisoWrap, opacityUV); + + specular.rgb *= pow(SpecularTextureSample.rgb, gammaCorrection); + + if (UseSpecularTextureAlpha) { + specular.a = SpecularTextureSample.a; + } + } + + float cavity = 1; + if (UseCavityTexture) { + float2 cavityUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float CavityTextureSample = CavityTexture.Sample(SamplerAnisoWrap, cavityUV); + + cavity = lerp(1, pow(CavityTextureSample, gammaCorrection), CavityAmount); + } + + float microCavity = 1; + if (UseMicroCavityTexture) { + float2 cavityUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float MicroCavityTextureSample = MicroCavityTexture.Sample(SamplerAnisoWrap, cavityUV * MicroScale); + + microCavity = lerp(1, pow(MicroCavityTextureSample, gammaCorrection), MicroCavityAmount); + } + + specular.rgb *= cavity * microCavity; // We apply cavity on the specular before it is sent to the fresnel + + float roughness = Roughness; + if (UseSpecularTextureAlpha) { + roughness *= specular.a; + } + + float scatteringRadius = 1; + if (UseScatteringRadiusTexture) { + float2 scatteringUV = pickTexcoord(DiffuseTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float4 scatteringRadiusTextureSample = ScatteringRadiusTexture.Sample(SamplerAnisoWrap, scatteringUV); + + scatteringRadius *= pow(scatteringRadiusTextureSample, gammaCorrection); + } + + // Opacity: + float opacity = saturate(diffuse.a * Opacity); + + // Occlusion: + float3 ambientOcclusion = float3(1, 1, 1); + if (UseAmbientOcclusionTexture) { + float2 aomapUV = pickTexcoord(OcclusionTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float3 aomapTextureSample = OcclusionTexture.Sample(SamplerAnisoWrap, aomapUV).rgb; + ambientOcclusion *= lerp(1, pow(aomapTextureSample.rgb, gammaCorrection), OcclusionAmount); + } + + float3 thickness = float3(1, 1, 1); + if (UseThicknessTexture) { + float2 thicknessUV = pickTexcoord(ThicknessTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + thickness = pow(BackScatteringThicknessTexture.Sample(SamplerAnisoWrap, thicknessUV), gammaCorrection).xyz; + } + + float3 skinOcclusion = coloredOcclusion(diffuse, ambientOcclusion); // Colored occlusion for skin + + float softenMask = 1.0f; + + float2 screenCoord = IN.screenCoord.xy / IN.screenCoord.w; + //float2 currentScreenSize = screenSize; // TO DO FIND A WAY TO GET SCREEN SIZE, MAYA BUG ? + float2 currentScreenSize = float2(1024, 512); + + // -------- + // LIGHTS: + // -------- + // future todo: Maya could pass light info in array so we can loop any number of lights. + + // light 0: + lightOut light0 = CalculateLight(light0Enable, light0Type, light0AttenScale, light0Pos, IN.worldPosition.xyz, + light0Color, light0Intensity, light0Dir, light0ConeAngle, light0FallOff, light0Matrix, + light0ShadowMap, light0ShadowOn, blurredNormal, N, diffuse, V, roughness, specular, + thickness, softenMask, gammaCorrection, opacity, ambientOcclusion, skinOcclusion, screenCoord, currentScreenSize, scatteringRadius); + + // light 1: + lightOut light1 = CalculateLight(light1Enable, light1Type, light1AttenScale, light1Pos, IN.worldPosition.xyz, + light1Color, light1Intensity, light1Dir, light1ConeAngle, light1FallOff, light1Matrix, + light1ShadowMap, light1ShadowOn, blurredNormal, N, diffuse, V, roughness, specular, + thickness, softenMask, gammaCorrection, opacity, ambientOcclusion, skinOcclusion, screenCoord, currentScreenSize, scatteringRadius); + + // light 2: + lightOut light2 = CalculateLight(light2Enable, light2Type, light2AttenScale, light2Pos, IN.worldPosition.xyz, + light2Color, light2Intensity, light2Dir, light2ConeAngle, light2FallOff, light2Matrix, + light2ShadowMap, light2ShadowOn, blurredNormal, N, diffuse, V, roughness, specular, + thickness, softenMask, gammaCorrection, opacity, ambientOcclusion, skinOcclusion, screenCoord, currentScreenSize, scatteringRadius); + + float3 lightTotal = light0.Color + light1.Color + light2.Color; + + + // ---------------------- + // IMAGE BASED LIGHTING + // ---------------------- + + // Specular IBL + float3 specularIBL = float3(0, 0, 0); + bool reflectMapUsed = UseSpecCubeIBL; + if (reflectMapUsed) { + int lod = 7; // Hard coded mip map level + + float3 reflectionVector = reflect(-V, N); + + reflectionVector = RotateVectorYaw(reflectionVector, SkyRotation); + reflectionVector = normalize(reflectionVector); + float NdotV = saturate(dot(N, V)); + float3 F = F_LagardeSchlick(specular, 1 - roughness, NdotV); + + specularIBL += SpecularCubeIBL.SampleLevel(CubeMapSampler, reflectionVector, lod * roughness).rgb * F; + } + + // Diffuse IBL + float3 diffuseIBL = float3(0, 0, 0); + bool useDiffuseIBL = UseDiffuseIBLMap; + if (useDiffuseIBL) { + // We use the world normal to sample the lighting texture + float3 diffuseIBLVec_High = N; + float3 diffuseIBLVec_Low = blurredNormal; + + diffuseIBLVec_High = RotateVectorYaw(diffuseIBLVec_High, SkyRotation); + diffuseIBLVec_High = normalize(diffuseIBLVec_High); + + diffuseIBLVec_Low = RotateVectorYaw(diffuseIBLVec_Low, SkyRotation); + diffuseIBLVec_Low = normalize(diffuseIBLVec_Low); + + float3 diffuseIBL_High = DiffuseCubeIBL.SampleLevel(CubeMapSampler, diffuseIBLVec_High, 0).rgb; + float3 diffuseIBL_Low = DiffuseCubeIBL.SampleLevel(CubeMapSampler, diffuseIBLVec_Low, 0).rgb; + + diffuseIBL = diffuseSkinIBL(float3(skinCoeffX, skinCoeffY, skinCoeffZ), diffuseIBL_High, diffuseIBL_Low); + } + + // ---------------------- + // FINAL COLOR AND ALPHA: + // ---------------------- + + float3 result = float3(0, 0, 0); + + result += diffuse * diffuseIBL * DiffuseIBLIntensity * skinOcclusion; + + result += specularIBL * SpecularIBLIntensity * specularOcclusion(N, V, ambientOcclusion); + + result += lightTotal; + + //result = N; + + // do gamma correction in shader: + if (!MayaFullScreenGamma) + result = pow(result, 1 / gammaCorrection); + + // final alpha: + float transparency = opacity; + transparency = saturate(transparency); // keep 0-1 range + + return float4(result, transparency); +} + + +#ifdef _MAYA_ +void Peel(SHADERDATA IN) { + float currZ = abs(mul(float4(IN.worldPosition, 1.0f), view).z); + + float4 Pndc = mul(float4(IN.worldPosition, 1.0f), viewPrj); + float2 UV = Pndc.xy / Pndc.w * float2(0.5f, -0.5f) + 0.5f; + float prevZ = transpDepthTexture.Sample(SamplerShadowDepth, UV).r; + float opaqZ = opaqueDepthTexture.Sample(SamplerShadowDepth, UV).r; + float bias = 0.00002f; + + if (currZ < prevZ * (1.0f + bias) || currZ > opaqZ * (1.0f - bias)) { + discard; + } +} + +float4 LinearDepth(SHADERDATA IN) { + return abs(mul(float4(IN.worldPosition, 1.0f), view).z); +} + +float4 DepthComplexity(float opacity) { + return opacity > 0.001f ? 1.0f : 0.0f; +} + +struct MultiOut2 { + float4 target0 : SV_Target0; + float4 target1 : SV_Target1; +}; + +MultiOut2 fTransparentPeel(SHADERDATA IN, bool FrontFace : SV_IsFrontFace) { + Peel(IN); + + MultiOut2 OUT; + OUT.target0 = f(IN, FrontFace); + OUT.target1 = LinearDepth(IN); + return OUT; +} + +MultiOut2 fTransparentPeelAndAvg(SHADERDATA IN, bool FrontFace : SV_IsFrontFace) { + Peel(IN); + + MultiOut2 OUT; + OUT.target0 = f(IN, FrontFace); + OUT.target1 = DepthComplexity(OUT.target0.w); + return OUT; +} + +MultiOut2 fTransparentWeightedAvg(SHADERDATA IN, bool FrontFace : SV_IsFrontFace) { + MultiOut2 OUT; + OUT.target0 = f(IN, FrontFace); + OUT.target1 = DepthComplexity(OUT.target0.w); + return OUT; +} + +//------------------------------------ +// wireframe pixel shader +//------------------------------------ +float4 fwire(SHADERDATA IN) : SV_Target { + return float4(0, 0, 1, 1); +} + + +//------------------------------------ +// pixel shader for shadow map generation +//------------------------------------ +//float4 ShadowMapPS( float3 Pw, float4x4 shadowViewProj ) +float4 ShadowMapPS(SHADERDATA IN) : SV_Target { + // clip as early as possible + float2 opacityMaskUV = pickTexcoord(OpacityMaskTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + OpacityMaskClip(opacityMaskUV); + + float4 Pndc = mul(float4(IN.worldPosition, 1.0f), viewPrj); + + // divide Z and W component from clip space vertex position to get final depth per pixel + float retZ = Pndc.z / Pndc.w; + + retZ += fwidth(retZ); + return retZ.xxxx; +} +#endif + +//----------------------------------- +// Objects without tessellation +//------------------------------------ +technique11 TessellationOFF < + bool overridesDrawState = false; // we do not supply our own render state settings + int isTransparent = 3; + // objects with clipped pixels need to be flagged as isTransparent to avoid the occluding underlying geometry since Maya renders the object with flat shading when computing depth + string transparencyTest = "Opacity < 1.0 || (UseDiffuseTexture && UseDiffuseTextureAlpha) || UseOpacityMaskTexture"; + // 'VariableNameAsAttributeName = false' can be used to tell Maya's DX11ShaderNode to use the UIName annotation string for the Maya attribute name instead of the shader variable name. + // When changing this option, the attribute names generated for the shader inside Maya will change and this can have the side effect that older scenes have their shader attributes reset to default. + // bool VariableNameAsAttributeName = false; + +#ifdef _MAYA_ + // Tells Maya that the effect supports advanced transparency algorithm, + // otherwise Maya would render the associated objects simply by alpha + // blending on top of other objects supporting advanced transparency + // when the viewport transparency algorithm is set to depth-peeling or + // weighted-average. + bool supportsAdvancedTransparency = true; +#endif +> +{ + pass p0 < string drawContext = "colorPass"; > { // tell maya during what draw context this shader should be active, in this case 'Color' + // even though overrideDrawState is false, we still set the pre-multiplied alpha state here in + // case Maya is using 'Depth Peeling' transparency algorithm + // This unfortunately won't solve sorting issues, but at least our object can draw transparent. + // If we don't set this, the object will always be opaque. + // In the future, hopefully ShaderOverride nodes can participate properly in Maya's Depth Peeling setup +#ifdef _MAYA_ + SetBlendState(PMAlphaBlending, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF); +#endif + SetVertexShader(CompileShader(vs_5_0, v())); + SetHullShader(NULL); + SetDomainShader(NULL); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, f())); + } + +#ifdef _MAYA_ + pass pTransparentPeel < string drawContext = "transparentPeel"; > { // Depth-peeling pass for depth-peeling transparency algorithm. + SetVertexShader(CompileShader(vs_5_0, v())); + SetHullShader(NULL); + SetDomainShader(NULL); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentPeel())); + } + + pass pTransparentPeelAndAvg < string drawContext = "transparentPeelAndAvg"; > { // Weighted-average pass for depth-peeling transparency algorithm. + SetVertexShader(CompileShader(vs_5_0, v())); + SetHullShader(NULL); + SetDomainShader(NULL); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentPeelAndAvg())); + } + + pass pTransparentWeightedAvg < string drawContext = "transparentWeightedAvg"; > { // Weighted-average algorithm. No peeling. + SetVertexShader(CompileShader(vs_5_0, v())); + SetHullShader(NULL); + SetDomainShader(NULL); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentWeightedAvg())); + } + + pass pShadow < string drawContext = "shadowPass"; > { + SetVertexShader(CompileShader(vs_5_0, v())); + SetHullShader(NULL); + SetDomainShader(NULL); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, ShadowMapPS())); + } +#endif +} + +#ifdef _SUPPORTTESSELLATION_ +//----------------------------------- +// Objects with tessellation +//------------------------------------ +// Vertex Index Buffer options: +// index_buffer_type: None; // no divergent normals and no displacement crack fix +// index_buffer_type: PNAEN9; // divergent normals crack fix; no displacement UV seam crack fix +// index_buffer_type: PNAEN18, // crack fix for divergent normals and UV seam displacement +technique11 TessellationON < + string index_buffer_type = "PNAEN18"; // tell Maya what type of index buffer we want. Must be unique name per generator + bool overridesDrawState = false; + int isTransparent = 3; + string transparencyTest = "Opacity < 1.0 || (UseDiffuseTexture && UseDiffuseTextureAlpha) || UseOpacityMaskTexture"; + bool supportsAdvancedTransparency = true; > { + pass p0 < string drawContext = "colorPass"; > { + SetBlendState(PMAlphaBlending, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF); + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); // without geo + //SetGeometryShader( CompileShader(gs_5_0, GS()) ); // with geo + SetPixelShader(CompileShader(ps_5_0, f())); + } + + pass pTransparentPeel < string drawContext = "transparentPeel";> { // Depth-peeling pass for depth-peeling transparency algorithm. + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentPeel())); + } + + pass pTransparentPeelAndAvg < string drawContext = "transparentPeelAndAvg"; > { // Weighted-average pass for depth-peeling transparency algorithm. + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentPeelAndAvg())); + } + + pass pTransparentWeightedAvg < string drawContext = "transparentWeightedAvg"; > { // Weighted-average algorithm. No peeling. + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentWeightedAvg())); + } + + pass pShadow < string drawContext = "shadowPass"; > { + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, ShadowMapPS())); + } +} + +//----------------------------------- +// Wireframe +//------------------------------------ +technique11 WireFrame < + string index_buffer_type = "PNAEN18"; + bool overridesDrawState = false; // since we only change the fillMode, it can remain on false. If we changed the blend state, it would have to be true + int isTransparent = 0; > { + pass p0 < string drawContext = "colorPass"; > { + SetRasterizerState(WireframeCullFront); + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); // without geo + //SetGeometryShader( CompileShader(gs_5_0, GS()) ); // with geo + SetPixelShader(CompileShader(ps_5_0, fwire())); + } +} +#endif diff --git a/data/shaders/dx11_shd_teeth.fx b/data/shaders/dx11_shd_teeth.fx new file mode 100644 index 0000000..6b74541 --- /dev/null +++ b/data/shaders/dx11_shd_teeth.fx @@ -0,0 +1,2872 @@ +// Maya Skin shader made by Charles Greivelding 2014 + +//------------------------------------ +// Notes +//------------------------------------ +// Shader uses 'pre-multiplied alpha' as its render state and this Uber Shader is build to work in unison with that. +// Alternatively, in Maya, the dx11Shader node allows you to set your own render states by supplying the 'overridesDrawState' annotation in the technique +// You may find it harder to get proper transparency sorting if you choose to do so. + +// The technique annotation 'isTransparent' is used to tell Maya how treat the technique with respect to transparency. +// - If set to 0 the technique is always considered opaque +// - If set to 1 the technique is always considered transparent +// - If set to 2 the plugin will check if the parameter marked with the OPACITY semantic is less than 1.0 +// - If set to 3 the plugin will use the transparencyTest annotation to create a MEL procedure to perform the desired test. +// Maya will then render the object twice. Front faces follow by back faces. + +// For some objects you may need to switch the Transparency Algorithm to 'Depth Peeling' to avoid transparency issues. +// Models that require this usually have internal faces. + +//------------------------------------ +// Defines +//------------------------------------ +// how many mip map levels should Maya generate or load per texture. +// 0 means all possible levels +// some textures may override this value, but most textures will follow whatever we have defined here +// If you wish to optimize performance (at the cost of reduced quality), you can set NumberOfMipMaps below to 1 + +#define NumberOfMipMaps 0 +#define PI 3.1415926 +#define _3DSMAX_SPIN_MAX 99999 + +#ifndef _MAYA_ +#define _3DSMAX_ // at time of writing this shader, Nitrous driver did not have the _3DSMAX_ define set +#define _ZUP_ // Maya is Y up, 3dsMax is Z up +#endif + +#ifdef _MAYA_ +#define _SUPPORTTESSELLATION_ // at time of writing this shader, 3dsMax did not support tessellation +#endif + +//------------------------------------ +// State +//------------------------------------ +#ifdef _MAYA_ +RasterizerState WireframeCullFront { + CullMode = Front; + FillMode = WIREFRAME; +}; + +BlendState PMAlphaBlending { + AlphaToCoverageEnable = FALSE; + BlendEnable[0] = TRUE; + SrcBlend = ONE; + DestBlend = INV_SRC_ALPHA; + BlendOp = ADD; + SrcBlendAlpha = ONE; // Required for hardware frame render alpha channel + DestBlendAlpha = INV_SRC_ALPHA; + BlendOpAlpha = ADD; + RenderTargetWriteMask[0] = 0x0F; +}; +#endif + +//------------------------------------ +// Map Channels +//------------------------------------ +#ifdef _3DSMAX_ +int texcoord0 : Texcoord < + int Texcoord = 0; + int MapChannel = 1; + string UIWidget = "None"; +>; + +int texcoord1 : Texcoord < + int Texcoord = 1; + int MapChannel = 2; + string UIWidget = "None"; +>; + +int texcoord2 : Texcoord < + int Texcoord = 2; + int MapChannel = 3; + string UIWidget = "None"; +>; +#endif + +//------------------------------------ +// Samplers +//------------------------------------ +SamplerState CubeMapSampler { + Filter = ANISOTROPIC; + AddressU = Clamp; + AddressV = Clamp; + AddressW = Clamp; +}; + +SamplerState SamplerAnisoWrap { + Filter = ANISOTROPIC; + AddressU = Wrap; + AddressV = Wrap; +}; + +SamplerState SamplerAnisoClamp { + Filter = ANISOTROPIC; + AddressU = Clamp; + AddressV = Clamp; +}; + +SamplerState SamplerShadowDepth { + Filter = MIN_MAG_MIP_POINT; + AddressU = Border; + AddressV = Border; + BorderColor = float4(1.0f, 1.0f, 1.0f, 1.0f); +}; + +//------------------------------------ +// Textures +//------------------------------------ + +Texture2D LutTexture < + string UIGroup = "SubSurfaceScattering"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "SSS LUT Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 203; + int UVEditorOrder = 2; +>; + +Texture2D DitherTexture < + string UIGroup = "SubSurfaceScattering"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "SSS Dither Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 203; + int UVEditorOrder = 2; +>; + +// --------------------------------------------- +// Blend GROUP +// --------------------------------------------- + +bool UseBlendTexture < + string UIGroup = "Wrinkle mixing"; + string UIName = "Enable Wrinkle Mixing"; + int UIOrder = 919; +> = false; + + + + + + +Texture2D OcclusionTexture < + string UIGroup = "Occlusion"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Ambient Occlusion Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 401; + int UVEditorOrder = 2; +>; + +Texture2D ScatteringRadiusTexture < + string UIGroup = "SubSurfaceScattering"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "SSS Radius Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 209; + int UVEditorOrder = 2; +>; + +Texture2D CavityTexture < + string UIGroup = "Cavity"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Cavity Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 501; + int UVEditorOrder = 4; +>; + +Texture2D DiffuseTexture < + string UIGroup = "Diffuse"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Diffuse Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 201; + int UVEditorOrder = 1; +>; + +Texture2D SpecularTexture < + string UIGroup = "Specular"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Specular Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 302; + int UVEditorOrder = 4; +>; + +Texture2D NormalTexture < + string UIGroup = "Normal"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Normal Map"; + string ResourceType = "2D"; + int mipmaplevels = 0; // If mip maps exist in texture, Maya will load them. So user can pre-calculate and re-normalize mip maps for normal maps in .dds + int UIOrder = 601; + int UVEditorOrder = 5; +>; + +Texture2D MicroCavityTexture < + string UIGroup = "Micro Details"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Micro Cavity Map"; + string ResourceType = "2D"; + int mipmaplevels = 0; + int UIOrder = 701; + int UVEditorOrder = 5; +>; + +Texture2D MicroNormalTexture < + string UIGroup = "Micro Details"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Micro Normal Map"; + string ResourceType = "2D"; + int mipmaplevels = 0; + int UIOrder = 704; + int UVEditorOrder = 5; +>; + +#ifdef _SUPPORTTESSELLATION_ +Texture2D DisplacementTexture < + string UIGroup = "Tessellation and Displacement"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Displacement Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 902; + int UVEditorOrder = 8; +>; +#endif + +Texture2D BackScatteringThicknessTexture < + string UIGroup = "BackScattering"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Thickness Map"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 215; + int UVEditorOrder = 10; +>; + +Texture2D OpacityMaskTexture < + string UIGroup = "Opacity"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Opacity Mask"; + string ResourceType = "2D"; + int mipmaplevels = NumberOfMipMaps; + int UIOrder = 800; + int UVEditorOrder = 12; +>; + +TextureCube DiffuseCubeIBL < + string UIGroup = "IBL Settings"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Diffuse Cubemap"; + string ResourceType = "Cube"; + int mipmaplevels = 0; // Use (or load) max number of mip map levels so we can use blurring + int UIOrder = 108; + int UVEditorOrder = 10; +>; + +TextureCube SpecularCubeIBL : environment < + string UIGroup = "IBL Settings"; + string ResourceName = ""; + string UIWidget = "FilePicker"; + string UIName = "Specular Cubemap"; + string ResourceType = "Cube"; + int mipmaplevels = 0; + int UIOrder = 111; + int UVEditorOrder = 6; +>; + +//------------------------------------ +// Shadow Maps +//------------------------------------ +Texture2D light0ShadowMap : SHADOWMAP < + string Object = "Light 0"; // UI Group for lights, auto-closed + string UIWidget = "None"; + int UIOrder = 5010; +>; + +Texture2D light1ShadowMap : SHADOWMAP < + string Object = "Light 1"; + string UIWidget = "None"; + int UIOrder = 5020; +>; + +Texture2D light2ShadowMap : SHADOWMAP < + string Object = "Light 2"; + string UIWidget = "None"; + int UIOrder = 5030; +>; + +//------------------------------------ +// Internal depth textures for Maya depth-peeling transparency +//------------------------------------ +#ifdef _MAYA_ + +Texture2D transpDepthTexture : transpdepthtexture < + string UIWidget = "None"; +>; + +Texture2D opaqueDepthTexture : opaquedepthtexture < + string UIWidget = "None"; +>; + +#endif + +//------------------------------------ +// Per Frame parameters +//------------------------------------ +cbuffer UpdatePerFrame : register(b0) { + float4x4 viewInv : ViewInverse < string UIWidget = "None"; >; + float4x4 view : View < string UIWidget = "None"; >; + float4x4 prj : Projection < string UIWidget = "None"; >; + float4x4 viewPrj : ViewProjection < string UIWidget = "None"; >; + + // A shader may wish to do different actions when Maya is rendering the preview swatch (e.g. disable displacement) + // This value will be true if Maya is rendering the swatch + bool IsSwatchRender : MayaSwatchRender < string UIWidget = "None"; > = false; + float2 screenSize : ViewportPixelSize < string UIWidget = "None"; >; + + // If the user enables viewport gamma correction in Maya's global viewport rendering settings, the shader should not do gamma again + bool MayaFullScreenGamma : MayaGammaCorrection < string UIWidget = "None"; > = false; +} + + +//------------------------------------ +// Per Object parameters +//------------------------------------ +cbuffer UpdatePerObject : register(b1) { + float4x4 world : World < string UIWidget = "None"; >; + float4x4 worldIT : WorldInverseTranspose < string UIWidget = "None"; >; +#ifndef _SUPPORTTESSELLATION_ + float4x4 wvp : WorldViewProjection < string UIWidget = "None"; >; +#endif + +// --------------------------------------------- +// Lighting Settings GROUP +// --------------------------------------------- +bool LinearSpaceLighting < + string UIGroup = "Lighting Settings"; + string UIName = "Linear Space Lighting"; + int UIOrder = 100; +> = true; + +bool UseShadows < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string UIGroup = "Lighting Settings"; + string UIName = "Shadows"; + int UIOrder = 101; +#endif +> = true; + +float shadowMultiplier < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string UIGroup = "Lighting Settings"; + string UIWidget = "Slider"; + float UIMin = 0.000; + float UIMax = 1.000; + float UIStep = 0.001; + string UIName = "Shadow Strength"; + int UIOrder = 102; +#endif +> = { 1.0f }; + +// This offset allows you to fix any in-correct self shadowing caused by limited precision. +// This tends to get affected by scene scale and polygon count of the objects involved. +float shadowDepthBias : ShadowMapBias < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string UIGroup = "Lighting Settings"; + string UIWidget = "Slider"; + float UIMin = 0.000; + float UISoftMax = 10.000; + float UIStep = 0.001; + string UIName = "Shadow Bias"; + int UIOrder = 103; +#endif +> = { 0.01f }; + +// flips back facing normals to improve lighting for things like sheets of hair or leaves +bool flipBackfaceNormals < + string UIGroup = "Lighting Settings"; + string UIName = "Double Sided Lighting"; + int UIOrder = 104; +> = true; + +// -- light props are inserted here via UIOrder 20 - 49 + +// --------------------------------------------- +// IBL Settings GROUP +// --------------------------------------------- + +float SkyRotation < + string UIGroup = "IBL Settings"; + string UIName = "Sky Rotation"; + float UISoftMin = 0; + float UISoftMax = 360; + float UIMin = 0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 1; + int UIOrder = 105; + string UIWidget = "Slider"; +> = { 0.0f }; + +bool UseDiffuseIBLMap < + string UIGroup = "IBL Settings"; + string UIName = "Use Diffuse Cubemap"; + int UIOrder = 106; +> = false; + +float DiffuseIBLIntensity < + string UIGroup = "IBL Settings"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 2.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.001; + string UIName = "Diffuse IBL Intensity"; + int UIOrder = 107; +> = 1.0; + +bool UseSpecCubeIBL < + string UIGroup = "IBL Settings"; + string UIName = "Use Specular Cubemap"; + int UIOrder = 109; +> = false; + +float SpecularIBLIntensity < + string UIGroup = "IBL Settings"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 2.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.001; + string UIName = "Specular IBL Intensity"; + int UIOrder = 110; +> = 1.0; + +// --------------------------------------------- +// Diffuse GROUP +// --------------------------------------------- + +bool UseDiffuseTexture < + string UIGroup = "Diffuse"; + string UIName = "Use Diffuse Map"; + int UIOrder = 200; +> = false; + + +bool UseDiffuseTextureAlpha < + string UIGroup = "Diffuse"; + string UIName = "Use Diffuse Map Alpha"; + int UIOrder = 201; +> = false; + +float3 DiffuseColor : Diffuse < + string UIGroup = "Diffuse"; + string UIName = "Diffuse Color"; + string UIWidget = "ColorPicker"; + int UIOrder = 202; +> = { 1.0f, 1.0f, 1.0f }; + +// --------------------------------------------- +// SSS GROUP +// --------------------------------------------- + +float skinCoeffX < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Coeffient R"; + int UIOrder = 204; +> = 1.0; + +float skinCoeffY < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Coeffient G"; + int UIOrder = 205; +> = 0.5; + +float skinCoeffZ < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Coeffient B"; + int UIOrder = 206; +> = 0.25; + +float NormalBlurring < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Softness"; + int UIOrder = 207; +> = 0.25; + +bool UseScatteringRadiusTexture < + string UIGroup = "SubSurfaceScattering"; + string UIName = "Use SSS Radius Map"; + int UIOrder = 209; +> = false; + +float skinScattering < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Radius"; + int UIOrder = 210; +> = 0.25; + +float shadowBlur < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Shadow Blur"; + int UIOrder = 211; +> = 1.0; + +float shadowDither < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Shadow Dither"; + int UIOrder = 211; +> = 1.0; + +float shadowScattering < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "SSS Shadow Scattering"; + int UIOrder = 212; +> = 1.0; + +float shadowSaturation < + string UIGroup = "SubSurfaceScattering"; + float UIMin = 0.0; + float UISoftMax = 4.0; + float UIMax = 4; + float UIStep = 0.1; + string UIName = "SSS Shadow Saturation"; + int UIOrder = 213; +> = 1.0; + +// --------------------------------------------- +// BackScattering GROUP +// --------------------------------------------- + +bool UseTranslucency < + string UIGroup = "BackScattering"; + string UIName = "Back Scattering"; + int UIOrder = 214; +> = false; + +bool UseThicknessTexture < + string UIGroup = "BackScattering"; + string UIName = "Use Thickness Map"; + int UIOrder = 216; +> = false; + +float skinScatteringRoughness < + string UIGroup = "BackScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "Back Scattering Width"; + int UIOrder = 217; +> = 1.0; + +/*float3 skinScatteringInnerColor < + string UIGroup = "BackScattering"; + string UIName = "Back Scattering Inner Color"; + string UIWidget = "ColorPicker"; + int UIOrder = 215; +> = {0.25f, 0.05f, 0.02f };*/ + +float3 skinScatteringOuterColor < + string UIGroup = "BackScattering"; + string UIName = "Back Scattering Color"; + string UIWidget = "ColorPicker"; + int UIOrder = 218; +> = { 0.25f, 0.05f, 0.02f }; + +float skinScatteringAmount < + string UIGroup = "BackScattering"; + float UIMin = 0.0; + float UISoftMax = 6.0; + float UIMax = 6; + float UIStep = 0.1; + string UIName = "Back Scattering Amount"; + int UIOrder = 219; +> = 1.0; + +float skinAmbientScatteringAmount < + string UIGroup = "BackScattering"; + float UIMin = 0.0; + float UISoftMax = 6.0; + float UIMax = 6; + float UIStep = 0.1; + string UIName = "Back Scattering Ambient Amount"; + int UIOrder = 220; +> = 1.0; + +/* float skinScatteringPlane < + string UIGroup = "BackScattering"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1; + float UIStep = 0.1; + string UIName = "Back Scattering Far Plane"; + int UIOrder = 218; +> = 1.0;*/ + +// --------------------------------------------- +// Specular GROUP +// --------------------------------------------- + +bool UseSpecularTexture < + string UIGroup = "Specular"; + string UIName = "Use Specular Map"; + int UIOrder = 301; +> = false; + +bool UseSpecularTextureAlpha < + string UIGroup = "Specular"; + string UIName = "Use Roughness Map Alpha"; + int UIOrder = 301; +> = false; + +float3 SpecularColor : Specular < + string UIGroup = "Specular"; + string UIName = "Specular Color"; + string UIWidget = "ColorPicker"; + int UIOrder = 303; +> = { 1.0f, 1.0f, 1.0f }; + + +float LobeMix < + string UIGroup = "Specular"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 1.0; + float UIMax = 1.0; + float UIStep = 0.01; + string UIName = "Lobe Mixing"; + int UIOrder = 304; +> = 0.75; + +float Roughness < + string UIGroup = "Specular"; + string UIWidget = "Slider"; + float UIMin = 0.01; + float UISoftMax = 1.0; + float UIMax = 1.0; + float UIStep = 0.01; + string UIName = "Roughness multiplier"; + int UIOrder = 305; +> = .2; + +// --------------------------------------------- +// Occlusion GROUP +// --------------------------------------------- + +bool UseAmbientOcclusionTexture < + string UIGroup = "Occlusion"; + string UIName = "Use Occlusion Map"; + int UIOrder = 400; +> = false; + +float OcclusionAmount < + string UIGroup = "Occlusion"; + string UIWidget = "Slider"; + float UIMin = 0.01; + float UISoftMax = 2.0; + float UIMax = 2.0; + float UIStep = 0.01; + string UIName = "Occlusion Amount"; + int UIOrder = 402; +> = 1.0; + +// --------------------------------------------- +// Cavity GROUP +// --------------------------------------------- + +bool UseCavityTexture < + string UIGroup = "Cavity"; + string UIName = "Use Cavity Map"; + int UIOrder = 500; +> = false; + +float CavityAmount < + string UIGroup = "Cavity"; + string UIWidget = "Slider"; + float UIMin = 0.01; + float UISoftMax = 2.0; + float UIMax = 2.0; + float UIStep = 0.01; + string UIName = "Cavity Amount"; + int UIOrder = 502; +> = 1.0; + +// --------------------------------------------- +// Normal GROUP +// --------------------------------------------- +bool UseNormalTexture < + string UIGroup = "Normal"; + string UIName = "Use Normal Map"; + int UIOrder = 600; +> = false; + +float NormalHeight < + string UIGroup = "Normal"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 5.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + string UIName = "Normal Height"; + int UIOrder = 603; +> = 1.0; + +bool SupportNonUniformScale < + string UIGroup = "Normal"; + string UIName = "Support Non-Uniform Scale"; + int UIOrder = 604; +> = true; + +int NormalCoordsysX < + string UIGroup = "Normal"; + string UIWidget = "Slider"; + float UIMin = 0; + float UIMax = 1; + float UIStep = 1; + string UIFieldNames = "Positive:Negative"; + string UIName = "Normal X (Red)"; + int UIOrder = 605; +> = 0; + +int NormalCoordsysY < + string UIGroup = "Normal"; + string UIWidget = "Slider"; + float UIMin = 0; + float UIMax = 1; + float UIStep = 1; + string UIFieldNames = "Positive:Negative"; + string UIName = "Normal Y (Green)"; + int UIOrder = 606; +> = 0; + +// --------------------------------------------- +// Micro Details GROUP +// --------------------------------------------- + +bool UseMicroCavityTexture < + string UIGroup = "Micro Details"; + string UIName = "Use Micro Cavity Map"; + int UIOrder = 700; +> = false; + +float MicroCavityAmount < + string UIGroup = "Micro Details"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 2.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + string UIName = "Micro Cavity Amount"; + int UIOrder = 702; +> = 1.0; + +bool UseMicroNormalTexture < + string UIGroup = "Micro Details"; + string UIName = "Use Micro Normal Map"; + int UIOrder = 703; +> = false; + +float MicroNormalHeight < + string UIGroup = "Micro Details"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 5.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + string UIName = "Micro Normal Height"; + int UIOrder = 705; +> = 1.0; + +float MicroScale < + string UIGroup = "Micro Details"; + string UIWidget = "Slider"; + float UIMin = 16.0; + float UISoftMax = 256.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + string UIName = "Micro Scale"; + int UIOrder = 706; +> = 32; + +// --------------------------------------------- +// Opacity GROUP +// --------------------------------------------- +float Opacity : OPACITY < + string UIGroup = "Opacity"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UIMax = 1.0; + float UIStep = 0.001; + string UIName = "Opacity"; + int UIOrder = 801; +> = 1.0; + +bool UseOpacityMaskTexture < + string UIGroup = "Opacity"; + string UIName = "Opacity Mask"; + int UIOrder = 802; +> = false; + +// at what value do we clip away pixels +float OpacityMaskBias < + string UIGroup = "Opacity"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UIMax = 1.0; + float UIStep = 0.001; + string UIName = "Opacity Mask Bias"; + int UIOrder = 803; +> = 0.1; + +#ifdef _SUPPORTTESSELLATION_ +// --------------------------------------------- +// Tessellation and Displacement GROUP +// --------------------------------------------- +int DisplacementModel < + string UIGroup = "Tessellation and Displacement"; + string UIName = "Displacement Model"; + string UIFieldNames = "Grayscale:Tangent Vector"; + float UIMin = 0; + float UIMax = 1; + float UIStep = 1; + int UIOrder = 900; +> = false; + +bool UseDisplacementMap < + string UIGroup = "Tessellation and Displacement"; + string UIName = "Displacement Map"; + int UIOrder = 901; +> = false; + +int VectorDisplacementCoordSys < + string UIGroup = "Tessellation and Displacement"; + string UIWidget = "Slider"; + string UIFieldNames = "Mudbox (XZY):Maya (XYZ)"; + string UIName = "Displacement Coordsys"; + float UIMin = 0; + float UIMax = 1; + float UIStep = 1; + int UIOrder = 903; +> = 0; + +float DisplacementHeight < + string UIGroup = "Tessellation and Displacement"; + float UISoftMin = 0.0; + float UISoftMax = 10.0; + string UIName = "Displacement Height"; + float UIMin = -(_3DSMAX_SPIN_MAX); + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.1; + int UIOrder = 904; +> = 0.5; + +// This allows you to control what the 'base' value for displacement is. +// When the offset value is 0.5, that means that a gray value (color: 128,128,128) will get 0 displacement. +// A value of 0 would then dent in. +// A value of 1 would then extrude. +float DisplacementOffset < + string UIGroup = "Tessellation and Displacement"; + float UISoftMin = -1.0; + float UISoftMax = 1.0; + float UIMin = -(_3DSMAX_SPIN_MAX); + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.1; + string UIName = "Displacement Offset"; + int UIOrder = 905; +> = 0.5; + +// This gives the artist control to prevent this shader from clipping away faces to quickly when displacement is actually keeping the faces on screen. +// This is also important for e.g. shadow map generation to make sure displaced vertices are not clipped out of the light's view +// See BBoxExtraScale for artist control over Maya clipping the entire object away when it thinks it leaves the view. +float DisplacementClippingBias < + string UIGroup = "Tessellation and Displacement"; + float UISoftMin = 0.0; + float UISoftMax = 99.0; + float UIMin = -(_3DSMAX_SPIN_MAX); + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.5; + string UIName = "Displacement Clipping Bias"; + int UIOrder = 906; +> = 5.0; + +// This gives the artist control to prevent maya from clipping away the entire object to fast in case displacement is used. +// Its semantic has to be BoundingBoxExtraScale +float BBoxExtraScale : BoundingBoxExtraScale < + string UIGroup = "Tessellation and Displacement"; + float UIMin = 1.0; + float UISoftMax = 10.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.5; + string UIName = "Bounding Box Extra Scale"; + int UIOrder = 907; +> = 1.0; + +float TessellationRange < + string UIGroup = "Tessellation and Displacement"; + string UIWidget = "Slider"; + float UIMin = 0.0; + float UISoftMax = 999.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 1.0; + string UIName = "Tessellation Range"; + int UIOrder = 908; +> = { 0 }; + +float TessellationMin < + string UIGroup = "Tessellation and Displacement"; + float UIMin = 1.0; + float UISoftMax = 10.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.5; + string UIName = "Tessellation Minimum"; + int UIOrder = 909; +> = 3.0; + +float FlatTessellation < + string UIGroup = "Tessellation and Displacement"; + float UIMin = 0.0; + float UIMax = 1.0; + float UIStep = 0.1; + string UIName = "Flat Tessellation"; + int UIOrder = 910; +> = 0.0; +#endif + +// --------------------------------------------- +// UV assignment GROUP +// --------------------------------------------- +// Use the Surface Data Section to set your UVset names for each Texcoord. +// E.g. TexCoord1 = uv:UVset +// Then pick a Texcoord in the UV Section to use that UVset for a texture. + +int DiffuseTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Diffuse Map UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2002; +> = 0; + +int OcclusionTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Ambient Occlusion Map UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2003; +> = 1; + +int OpacityMaskTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Opacity Mask UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2005; +> = 0; + +int SpecularTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Specular Map UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2006; +> = 0; + +int NormalTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Normal Map UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2008; +> = 0; + +#ifdef _SUPPORTTESSELLATION_ +int DisplacementTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Displacement Map UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2010; +> = 0; +#endif + +int ThicknessTexcoord < + string UIGroup = "UV"; + string UIWidget = "Slider"; + string UIFieldNames = "TexCoord0:TexCoord1:TexCoord2"; + string UIName = "Translucency Mask UV"; + float UIMin = 0; + float UIMax = 2; + float UIStep = 1; + int UIOrder = 2011; +> = 0; +} //end UpdatePerObject cbuffer + +//------------------------------------ +// Light parameters +//------------------------------------ +cbuffer UpdateLights : register(b2) { +// --------------------------------------------- +// Light 0 GROUP +// --------------------------------------------- +// This value is controlled by Maya to tell us if a light should be calculated +// For example the artist may disable a light in the scene, or choose to see only the selected light +// This flag allows Maya to tell our shader not to contribute this light into the lighting +bool light0Enable : LIGHTENABLE < +string Object = "Light 0"; // UI Group for lights, auto-closed +string UIName = "Enable Light 0"; +int UIOrder = 20; +#ifdef _MAYA_ +> = false; // maya manages lights itself and defaults to no lights +#else +> = true; // in 3dsMax we should have the default light enabled +#endif + +// follows LightParameterInfo::ELightType +// spot = 2, point = 3, directional = 4, ambient = 5, +int light0Type : LIGHTTYPE < + string Object = "Light 0"; + string UIName = "Light 0 Type"; + string UIFieldNames = "None:Default:Spot:Point:Directional:Ambient"; + int UIOrder = 21; + float UIMin = 0; + float UIMax = 5; + float UIStep = 1; +> = 2; // default to spot so the cone angle etc work when "Use Shader Settings" option is used + +float3 light0Pos : POSITION < + string Object = "Light 0"; + string UIName = "Light 0 Position"; + string Space = "World"; + int UIOrder = 22; + int RefID = 0; // 3DSMAX +> = { 100.0f, 100.0f, 100.0f }; + +float3 light0Color : LIGHTCOLOR < + string Object = "Light 0"; +#ifdef _3DSMAX_ + int LightRef = 0; + string UIWidget = "None"; +#else + string UIName = "Light 0 Color"; + string UIWidget = "Color"; + int UIOrder = 23; +#endif +> = { 1.0f, 1.0f, 1.0f }; + +float light0Intensity : LIGHTINTENSITY < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 0"; + string UIName = "Light 0 Intensity"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 24; +#endif +> = { 1.0f }; + +float3 light0Dir : DIRECTION < + string Object = "Light 0"; + string UIName = "Light 0 Direction"; + string Space = "World"; + int UIOrder = 25; + int RefID = 0; // 3DSMAX +> = { 100.0f, 100.0f, 100.0f }; + +#ifdef _MAYA_ +float light0ConeAngle : HOTSPOT // In radians +#else +float light0ConeAngle : LIGHTHOTSPOT +#endif +< + string Object = "Light 0"; +#ifdef _3DSMAX_ + int LightRef = 0; + string UIWidget = "None"; +#else + string UIName = "Light 0 Cone Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 26; +#endif +> = { 0.46f }; + +#ifdef _MAYA_ +float light0FallOff : FALLOFF // In radians. Sould be HIGHER then cone angle or lighted area will invert +#else +float light0FallOff : LIGHTFALLOFF +#endif +< + string Object = "Light 0"; +#ifdef _3DSMAX_ + int LightRef = 0; + string UIWidget = "None"; +#else + string UIName = "Light 0 Penumbra Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 27; +#endif +> = { 0.7f }; + +float light0AttenScale : DECAYRATE < + string Object = "Light 0"; + string UIName = "Light 0 Decay"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 28; +> = { 0.0 }; + +bool light0ShadowOn : SHADOWFLAG < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 0"; + string UIName = "Light 0 Casts Shadow"; + string UIWidget = "None"; + int UIOrder = 29; +#endif +> = true; + +float4x4 light0Matrix : SHADOWMAPMATRIX < + string Object = "Light 0"; + string UIWidget = "None"; +>; + +// --------------------------------------------- +// Light 1 GROUP +// --------------------------------------------- +bool light1Enable : LIGHTENABLE < + string Object = "Light 1"; + string UIName = "Enable Light 1"; + int UIOrder = 30; +> = false; + +int light1Type : LIGHTTYPE < + string Object = "Light 1"; + string UIName = "Light 1 Type"; + string UIFieldNames = "None:Default:Spot:Point:Directional:Ambient"; + float UIMin = 0; + float UIMax = 5; + int UIOrder = 31; +> = 2; + +float3 light1Pos : POSITION < + string Object = "Light 1"; + string UIName = "Light 1 Position"; + string Space = "World"; + int UIOrder = 32; + int RefID = 1; // 3DSMAX +> = { -100.0f, 100.0f, 100.0f }; + +float3 light1Color : LIGHTCOLOR < + string Object = "Light 1"; +#ifdef _3DSMAX_ + int LightRef = 1; + string UIWidget = "None"; +#else + string UIName = "Light 1 Color"; + string UIWidget = "Color"; + int UIOrder = 33; +#endif +> = { 1.0f, 1.0f, 1.0f }; + +float light1Intensity : LIGHTINTENSITY < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 1"; + string UIName = "Light 1 Intensity"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 34; +#endif +> = { 1.0f }; + +float3 light1Dir : DIRECTION < + string Object = "Light 1"; + string UIName = "Light 1 Direction"; + string Space = "World"; + int UIOrder = 35; + int RefID = 1; // 3DSMAX +> = { 100.0f, 100.0f, 100.0f }; + +#ifdef _MAYA_ +float light1ConeAngle : HOTSPOT // In radians +#else +float light1ConeAngle : LIGHTHOTSPOT +#endif +< + string Object = "Light 1"; +#ifdef _3DSMAX_ + int LightRef = 1; + string UIWidget = "None"; +#else + string UIName = "Light 1 Cone Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 36; +#endif +> = { 45.0f }; + +#ifdef _MAYA_ +float light1FallOff : FALLOFF // In radians. Sould be HIGHER then cone angle or lighted area will invert +#else +float light1FallOff : LIGHTFALLOFF +#endif +< + string Object = "Light 1"; +#ifdef _3DSMAX_ + int LightRef = 1; + string UIWidget = "None"; +#else + string UIName = "Light 1 Penumbra Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 37; +#endif +> = { 0.0f }; + +float light1AttenScale : DECAYRATE < + string Object = "Light 1"; + string UIName = "Light 1 Decay"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 38; +> = { 0.0 }; + +bool light1ShadowOn : SHADOWFLAG < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 1"; + string UIName = "Light 1 Casts Shadow"; + string UIWidget = "None"; + int UIOrder = 39; +#endif +> = true; + +float4x4 light1Matrix : SHADOWMAPMATRIX < + string Object = "Light 1"; + string UIWidget = "None"; +>; + +// --------------------------------------------- +// Light 2 GROUP +// --------------------------------------------- +bool light2Enable : LIGHTENABLE < + string Object = "Light 2"; + string UIName = "Enable Light 2"; + int UIOrder = 40; +> = false; + +int light2Type : LIGHTTYPE < + string Object = "Light 2"; + string UIName = "Light 2 Type"; + string UIFieldNames = "None:Default:Spot:Point:Directional:Ambient"; + float UIMin = 0; + float UIMax = 5; + int UIOrder = 41; +> = 2; + +float3 light2Pos : POSITION < + string Object = "Light 2"; + string UIName = "Light 2 Position"; + string Space = "World"; + int UIOrder = 42; + int RefID = 2; // 3DSMAX +> = { 100.0f, 100.0f, -100.0f }; + +float3 light2Color : LIGHTCOLOR < + string Object = "Light 2"; +#ifdef _3DSMAX_ + int LightRef = 2; + string UIWidget = "None"; +#else + string UIName = "Light 2 Color"; + string UIWidget = "Color"; + int UIOrder = 43; +#endif +> = { 1.0f, 1.0f, 1.0f }; + +float light2Intensity : LIGHTINTENSITY < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 2"; + string UIName = "Light 2 Intensity"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 44; +#endif +> = { 1.0f }; + +float3 light2Dir : DIRECTION < + string Object = "Light 2"; + string UIName = "Light 2 Direction"; + string Space = "World"; + int UIOrder = 45; + int RefID = 2; // 3DSMAX +> = { 100.0f, 100.0f, 100.0f }; + +#ifdef _MAYA_ +float light2ConeAngle : HOTSPOT // In radians +#else +float light2ConeAngle : LIGHTHOTSPOT +#endif +< + string Object = "Light 2"; +#ifdef _3DSMAX_ + int LightRef = 2; + string UIWidget = "None"; +#else + string UIName = "Light 2 Cone Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 46; +#endif +> = { 45.0f }; + +#ifdef _MAYA_ +float light2FallOff : FALLOFF // In radians. Sould be HIGHER then cone angle or lighted area will invert +#else +float light2FallOff : LIGHTFALLOFF +#endif +< +string Object = "Light 2"; +#ifdef _3DSMAX_ + int LightRef = 2; + string UIWidget = "None"; +#else + string UIName = "Light 2 Penumbra Angle"; + float UIMin = 0; + float UIMax = PI / 2; + int UIOrder = 47; +#endif +> = { 0.0f }; + +float light2AttenScale : DECAYRATE < + string Object = "Light 2"; + string UIName = "Light 2 Decay"; + float UIMin = 0.0; + float UIMax = _3DSMAX_SPIN_MAX; + float UIStep = 0.01; + int UIOrder = 48; +> = { 0.0 }; + +bool light2ShadowOn : SHADOWFLAG < +#ifdef _3DSMAX_ + string UIWidget = "None"; +#else + string Object = "Light 2"; + string UIName = "Light 2 Casts Shadow"; + string UIWidget = "None"; + int UIOrder = 49; +#endif +> = true; + +float4x4 light2Matrix : SHADOWMAPMATRIX < + string Object = "Light 2"; + string UIWidget = "None"; +>; + +} //end lights cbuffer + +//------------------------------------ +// Structs +//------------------------------------ +struct APPDATA { + float3 position : POSITION; + float2 texCoord0 : TEXCOORD0; + float2 texCoord1 : TEXCOORD1; + float2 texCoord2 : TEXCOORD2; + float3 normal : NORMAL; + float3 binormal : BINORMAL; + float3 tangent : TANGENT; +}; + +struct SHADERDATA { + float4 position : SV_Position; + float2 texCoord0 : TEXCOORD0; + float2 texCoord1 : TEXCOORD1; + float2 texCoord2 : TEXCOORD2; + float3 worldNormal : NORMAL; + float4 worldTangent : TANGENT; + float3 worldPosition : TEXCOORD3; + float4 screenCoord : TEXCOORD14; + +#ifdef _SUPPORTTESSELLATION_ + // Geometry generated control points: + // .worldPosition is CP0, so we don't need to store it again + float3 CP1 : TEXCOORD4; + float3 CP2 : TEXCOORD5; + + // PN-AEN with displacement fix: + float4 dominantEdge : TEXCOORD6; // both vertices of an edge + float2 dominantVertex : TEXCOORD7; // corner + + // Dominant normal and tangent for VDM crack fix: + // this could be compacted into less texcoords, but left as-is for readability + float3 dominantNormalE0 : TEXCOORD8; + float3 dominantNormalE1 : TEXCOORD9; + float3 dominantNormalCorner : TEXCOORD10; + + float3 dominantTangentE0 : TEXCOORD11; + float3 dominantTangentE1 : TEXCOORD12; + float3 dominantTangentCorner : TEXCOORD13; + + float clipped : CLIPPED; +#endif +}; + + +#ifdef _SUPPORTTESSELLATION_ +struct HSCONSTANTDATA { + float TessFactor[3] : SV_TessFactor; // tessellation amount for each edge of patch + float InsideTessFactor : SV_InsideTessFactor; // tessellation amount within a patch surface (would be float2 for quads) + float3 CPCenter : CENTER; // Geometry generated center control point +}; +#endif + +//------------------------------------ +// BRDF +//------------------------------------ + +float sqr(float x) { + return x*x; +} + +// [Beckmann 1963, "The scattering of electromagnetic waves from rough surfaces"] +float D_Beckmann(float Roughness, float NoH) { + float m = Roughness; + float m2 = m * m; + + float NdotH2 = sqr(NoH); + return exp((NdotH2 - 1) / (m2 * NdotH2)) / (PI * m2 * NdotH2 * NdotH2); +} + +// This function is from Nvidia's Human Head demo +float D_BeckmannNVIDIA(float m, float ndoth) { + float alpha = acos(ndoth); + float ta = tan(alpha); + float val = 1.0 / (m*m*pow(ndoth, 4.0)) * exp(-(ta*ta) / (m*m)); + return val; +} + +// Schlick 1994, "An Inexpensive BRDF Model for Physically-Based Rendering" +// Lagarde 2012, "Spherical Gaussian approximation for Blinn-Phong, Phong and Fresnel" +float3 F_Schlick(float3 SpecularColor, float LdotH) { + return SpecularColor + (1.0f - SpecularColor) * exp2((-5.55473 * LdotH - 6.98316) * LdotH); +} + +// Schlick 1994, "An Inexpensive BRDF Model for Physically-Based Rendering" +// Lagarde 2011, "Adopting a physically based shading model" +// Lagarde 2012, "Spherical Gaussian approximation for Blinn-Phong, Phong and Fresnel" +float3 F_LagardeSchlick(float3 SpecularColor, float Roughness, float NdotV) { + return SpecularColor + (max(1 - Roughness, SpecularColor) - SpecularColor) * exp2((-5.55473 * NdotV - 6.98316) * NdotV); +} + +float3 F_KelemenSzirmaykalos(float3 H, float3 V, float3 F0) { + float base = 1.0 - dot(V, H); + float exponential = pow(base, 5.0); + return exponential + F0 * (1.0 - exponential); +} + +float3 KelemenSzirmaykalos(float3 N, float3 L, float3 V, float roughness, float3 specular) { + float3 result = float3(0.0, 0.0, 0.0); + float NdotL = dot(N, L); + + if (NdotL > 0.0) { + float3 h = L + V; + float3 H = normalize(h); + float NdotH = dot(N, H); + float VdotH = dot(V, H); + float D = D_BeckmannNVIDIA(roughness, NdotH); + float3 F = F_Schlick(specular, VdotH); + float G = 1; + float3 specularDirect = max(D * G * F / dot(h, h), 0); + result = specularDirect * NdotL; // Specular is added for more tuning + } + return result; +} + +float3 PennerSkin(float3 skinCoef, float3 N, float3 L, float3 Nlow, float Curvature) { + float3 pennerX = lerp(N, Nlow, skinCoef.x); + float3 pennerY = lerp(N, Nlow, skinCoef.y); + float3 pennerZ = lerp(N, Nlow, skinCoef.z); + + float3 pennerNdotL = float3(dot(pennerX, L), dot(pennerY, L), dot(pennerZ, L)); + pennerNdotL = saturate(pennerNdotL * 0.5 + 0.5); + + float3 pennerlookUp; + pennerlookUp.r = LutTexture.Sample(SamplerAnisoClamp, float2(pennerNdotL.r, Curvature)).r; + pennerlookUp.g = LutTexture.Sample(SamplerAnisoClamp, float2(pennerNdotL.g, Curvature)).g; + pennerlookUp.b = LutTexture.Sample(SamplerAnisoClamp, float2(pennerNdotL.b, Curvature)).b; + + return pennerlookUp; +} + +float3 PennerSkinNoLUT(float3 skinCoef, float3 N, float3 L, float3 Nlow) { + float3 pennerX = lerp(N, Nlow, skinCoef.x); + float3 pennerY = lerp(N, Nlow, skinCoef.y); + float3 pennerZ = lerp(N, Nlow, skinCoef.z); + + float3 pennerNdotL = float3(dot(pennerX, L), dot(pennerY, L), dot(pennerZ, L)); + + float3 pennerlookUp; + pennerlookUp.r = saturate(pennerNdotL.r*(float3(1, 1, 1).r - skinCoef.r) + skinCoef.r) * (1 - skinCoef.r); + pennerlookUp.g = saturate(pennerNdotL.g*(float3(1, 1, 1).g - skinCoef.g) + skinCoef.g) * (1 - skinCoef.g); + pennerlookUp.b = saturate(pennerNdotL.b*(float3(1, 1, 1).b - skinCoef.b) + skinCoef.b) * (1 - skinCoef.b); + + return pennerlookUp; +} + +float3 diffuseSkinIBL(float3 skinCoef, float3 diffuseIBL_HighFreq, float3 diffuseIBL_LowFreq) { + return lerp(diffuseIBL_HighFreq, diffuseIBL_LowFreq, skinCoef); +} + +//------------------------------------ +// Functions +//------------------------------------ + +float4 ComputeScreenPos(float4 pos) { +#if UNITY_UV_STARTS_AT_TOP + float scale = -1.0; +#else + float scale = 1.0; +#endif + + float4 o = pos * 0.5f; + o.xy = float2(o.x, o.y*scale) + o.w; + o.zw = pos.zw; + + return o; +} + +// Occlusion taking into account the color of the texture multiplied to it +float3 coloredOcclusion(float3 color, float occlusion) { + float3 coloredOcclusion = lerp(float3(1.0f, 1.0f, 1.0f), color, (1 - occlusion)); + //color *= coloredOcclusion; + return coloredOcclusion; +} + +float specularOcclusion(float3 N, float3 V, float Occlusion) { + const float specularPow = 5.0; + float NdotV = dot(N, V); + float s = saturate(-0.3 + NdotV * NdotV); + + return lerp(pow(Occlusion, specularPow), 1.0, s); +} + +float2 pickTexcoord(int index, float2 t0, float2 t1, float2 t2) { + float2 tcoord = t0; + + if (index == 1) { + tcoord = t1; + } else if (index == 2) { + tcoord = t2; + } + + return tcoord; +} + +float3 RotateVectorYaw(float3 vec, float degreeOfRotation) { + float3 rotatedVec = vec; + float angle = radians(degreeOfRotation); + + rotatedVec.x = (cos(angle) * vec.x) - (sin(angle) * vec.z); + rotatedVec.z = (sin(angle) * vec.x) + (cos(angle) * vec.z); + + return rotatedVec; +} + +// Spot light cone +float lightConeangle(float coneAngle, float coneFalloff, float3 lightVec, float3 lightDir) { + // the cone falloff should be equal or bigger then the coneAngle or the light inverts + // this is added to make manually tweaking the spot settings easier. + if (coneFalloff < coneAngle) { + coneFalloff = coneAngle; + } + + float LdotDir = dot(normalize(lightVec), lightDir); + + // cheaper cone, no fall-off control would be: + // float cone = pow(saturate(LdotDir), 1 / coneAngle); + + // higher quality cone (more expensive): + float cone = smoothstep(cos(coneFalloff), cos(coneAngle), LdotDir); + + return cone; +} + +#define SHADOW_FILTER_TAPS_CNT 10 + +float2 SuperFilterTaps[SHADOW_FILTER_TAPS_CNT] < string UIWidget = "None"; > = { + { -0.84052f, -0.073954f }, + { -0.326235f, -0.40583f }, + { -0.698464f, 0.457259f }, + { -0.203356f, 0.6205847f }, + { 0.96345f, -0.194353f }, + { 0.473434f, -0.480026f }, + { 0.519454f, 0.767034f }, + { 0.185461f, -0.8945231f }, + { 0.507351f, 0.064963f }, + { -0.321932f, 0.5954349f } +}; + +static float4 kernel[25] = { + { 0.530605, 0.613514, 0.739601, 0 }, + { 0.000973794, 1.11862e-005, 9.43437e-007, -3 }, + { 0.00333804, 7.85443e-005, 1.2945e-005, -2.52083 }, + { 0.00500364, 0.00020094, 5.28848e-005, -2.08333 }, + { 0.00700976, 0.00049366, 0.000151938, -1.6875 }, + { 0.0094389, 0.00139119, 0.000416598, -1.33333 }, + { 0.0128496, 0.00356329, 0.00132016, -1.02083 }, + { 0.017924, 0.00711691, 0.00347194, -0.75 }, + { 0.0263642, 0.0119715, 0.00684598, -0.520833 }, + { 0.0410172, 0.0199899, 0.0118481, -0.333333 }, + { 0.0493588, 0.0367726, 0.0219485, -0.1875 }, + { 0.0402784, 0.0657244, 0.04631, -0.0833333 }, + { 0.0211412, 0.0459286, 0.0378196, -0.0208333 }, + { 0.0211412, 0.0459286, 0.0378196, 0.0208333 }, + { 0.0402784, 0.0657244, 0.04631, 0.0833333 }, + { 0.0493588, 0.0367726, 0.0219485, 0.1875 }, + { 0.0410172, 0.0199899, 0.0118481, 0.333333 }, + { 0.0263642, 0.0119715, 0.00684598, 0.520833 }, + { 0.017924, 0.00711691, 0.00347194, 0.75 }, + { 0.0128496, 0.00356329, 0.00132016, 1.02083 }, + { 0.0094389, 0.00139119, 0.000416598, 1.33333 }, + { 0.00700976, 0.00049366, 0.000151938, 1.6875 }, + { 0.00500364, 0.00020094, 5.28848e-005, 2.08333 }, + { 0.00333804, 7.85443e-005, 1.2945e-005, 2.52083 }, + { 0.000973794, 1.11862e-005, 9.43437e-007, 3 } +}; + + +static float2 kernelRandom[32] = { + { 0.254395, 0.385445 }, + { -0.139177, 0.571074 }, + { -0.453510, 0.962140 }, + { 0.482684, 0.346190 }, + { 0.889741, 0.724799 }, + { -0.661047, -0.137344 }, + { -0.193311, -0.313475 }, + { 0.363177, -0.960291 }, + { -0.225866, -0.654962 }, + { 0.407875, 0.431522 }, + { -0.543008, -0.992827 }, + { -0.878493, -0.896999 }, + { -0.641776, 0.130757 }, + { -0.785279, -0.015190 }, + { 0.469054, 0.248633 }, + { -0.820410, -0.562833 }, + { 0.174019, -0.618069 }, + { -0.906449, -0.275099 }, + { -0.655285, -0.956021 }, + { 0.453776, -0.085425 }, + { -0.430788, -0.089530 }, + { -0.587370, -0.851826 }, + { 0.149056, -0.474322 }, + { 0.228684, 0.321661 }, + { -0.668752, -0.829400 }, + { -0.729554, 0.438250 }, + { -0.467018, -0.252882 }, + { 0.090398, 0.618760 }, + { 0.741840, 0.516401 }, + { -0.983891, 0.248701 }, + { -0.162010, -0.714455 }, + { 0.308825, 0.787175 } +}; + +float shadowMapTexelSize < string UIWidget = "None"; > = { 0.00195313 }; // (1.0f / 512) + +// Shadows: +// Percentage-Closer Filtering +float3 lightShadow(float4x4 LightViewPrj, uniform Texture2D ShadowMapTexture, float3 VertexWorldPosition, float2 screenCoord, float skinRadius, float2 size) { + float4 dither = 2.0 * DitherTexture.SampleLevel(SamplerAnisoWrap, screenCoord.xy * size / 128, 0) - 1.0; + float2x2 rotationMatrix = float2x2(dither.x, dither.y, -dither.y, dither.x); + + float ditherShadow = 0; + float shadowColored = 0; + + float4 Pndc = mul(float4(VertexWorldPosition.xyz, 1.0), LightViewPrj); + Pndc.xyz /= Pndc.w; + + if (Pndc.x > -1.0f && Pndc.x < 1.0f && Pndc.y > -1.0f && Pndc.y < 1.0f && Pndc.z > 0.0f && Pndc.z < 1.0f) { + float2 uv = 0.5f * Pndc.xy + 0.5f; + uv = float2(uv.x, (1.0 - uv.y)); // maya flip Y + float z = Pndc.z - shadowDepthBias / Pndc.w; + + screenCoord.y = 1 - screenCoord.y; + + float shadowDepth = skinRadius; + shadowDepth *= 4.0; + + for (int i = 0; i < 32; ++i) { + float2 offset = kernelRandom[i] * shadowDepth * shadowMapTexelSize; + float2 ditherOffset = mul(offset, rotationMatrix); + ditherOffset = lerp(offset, ditherOffset, shadowDither); + float3 sample = z - ShadowMapTexture.SampleLevel(SamplerShadowDepth, uv + ditherOffset, 0).x; + + ditherShadow += (sample >= 0.0f) ? 0.0f : (1.0f / 32); + } + } + + return ditherShadow; +} + +float3 lightShadowSkin(float4x4 LightViewPrj, uniform Texture2D ShadowMapTexture, float3 VertexWorldPosition, float2 screenCoord, float skinRadius, float2 size, float2 dir) { + + float4 dither = 2.0 * DitherTexture.SampleLevel(SamplerAnisoWrap, screenCoord.xy * size / 128, 0) - 1.0; + float2x2 rotationMatrix = float2x2(dither.x, dither.y, -dither.y, dither.x); + + float ditherShadow = 0; + float3 shadowColored = float3(0, 0, 0); + + float4 Pndc = mul(float4(VertexWorldPosition.xyz, 1.0), LightViewPrj); + Pndc.xyz /= Pndc.w; + if (Pndc.x > -1.0f && Pndc.x < 1.0f && Pndc.y > -1.0f && Pndc.y < 1.0f && Pndc.z > 0.0f && Pndc.z < 1.0f) { + float2 uv = 0.5f * Pndc.xy + 0.5f; + uv = float2(uv.x, (1.0 - uv.y)); // maya flip Y + + float z = Pndc.z - shadowDepthBias / Pndc.w; + screenCoord.y = 1 - screenCoord.y; + + float shadowDepth = skinRadius; + shadowDepth *= 4.0; + + for (int i = 0; i < 25; ++i) { + float2 offset = kernel[i].a * dir * shadowDepth * shadowMapTexelSize; + offset = mul(offset, rotationMatrix); + float3 sample = z - ShadowMapTexture.SampleLevel(SamplerShadowDepth, uv + offset, 0).x; + ditherShadow = (sample >= 0.0f) ? 0.0f : 1.0f; + + shadowColored += ditherShadow * kernel[i].rgb; + } + } + + return shadowColored; +} + +#ifdef _SUPPORTTESSELLATION_ +// Pick dominant for crack free displacement (original function by Bryan Dudash, modified to support any float3) +float3 PickDominant(float3 vec, // vector to change + float U, float V, float W, // barycoords + float3 DE0A, float3 DE0B, // domimant edge 0 vertex A and B + float3 DE1A, float3 DE1B, // domimant edge 1 vertex A and B + float3 DE2A, float3 DE2B, // domimant edge 2 vertex A and B + float3 DV0, float3 DV1, float3 DV2) { // dominant corners + // Override the texture coordinates along the primitive edges and at the corners. + // Keep the original interpolated coords for the inner area of the primitive. + + float3 dominantVector = vec; + + float edgeThreshold = 0.0001f; + float edgeU = (U == 0) ? 1 : 0; + float edgeV = (V == 0) ? 1 : 0; + float edgeW = (W == 0) ? 1 : 0; + + float corner = ((edgeU + edgeV + edgeW) == 2) ? 1 : 0; // two are 0, means we are a corner + float edge = ((edgeU + edgeV + edgeW) == 1) ? 1 : 0; // one of them is 0, means we are an edge + float innerarea = ((edgeU + edgeV + edgeW) == 0) ? 1 : 0; // none are 0, means we are interior + + if (innerarea != 1) { + // Note: the order of the vertices/edges we choose here can be different per application + // and depend on how the index buffer was generated. + // These work for Maya with its PN-AEN18 primitive generator + if (corner) { + if (U > 1.0 - edgeThreshold) + dominantVector = DV1; + else if (V > 1.0 - edgeThreshold) + dominantVector = DV2; + else if (W > 1.0 - edgeThreshold) + dominantVector = DV0; + } else { + if (edgeU) + dominantVector = lerp(DE2A, DE2B, W); + else if (edgeV) + dominantVector = lerp(DE0A, DE0B, U); + else + dominantVector = lerp(DE1A, DE1B, V); + } + } + + return dominantVector; +} + +// outside of view? +float IsClipped(float4 clipPos) { + float W = clipPos.w + DisplacementClippingBias; // bias allows artist to control to early clipping due to displacement + // Test whether the position is entirely inside the view frustum. + return (-W <= clipPos.x && clipPos.x <= W && -W <= clipPos.y && clipPos.y <= W && -W <= clipPos.z && clipPos.z <= W) ? 0.0f : 1.0f; +} + +// Compute whether all three control points along the edge are outside of the view frustum. +// By doing this, we're ensuring that +// 1.0 means clipped, 0.0 means unclipped. +float ComputeClipping(float3 cpA, float3 cpB, float3 cpC) { + // Compute the projected position for each position, then check to see whether they are clipped. + float4 projPosA = mul(float4(cpA, 1), viewPrj), projPosB = mul(float4(cpB, 1), viewPrj), projPosC = mul(float4(cpC, 1), viewPrj); + return min(min(IsClipped(projPosA), IsClipped(projPosB)), IsClipped(projPosC)); +} + +// PN Triangles and PN-AEN control points: +float3 ComputeCP(float3 posA, float3 posB, float3 normA) { + return (2.0f * posA + posB - (dot((posB - posA), normA) * normA)) / 3.0f; +} +#endif + +// Clip pixel away when opacity mask is used +void OpacityMaskClip(float2 uv) { + if (UseOpacityMaskTexture) { + float OpacityMaskMap = OpacityMaskTexture.Sample(SamplerAnisoWrap, uv).x; + + // clip value when less then 0 for punch-through alpha. + clip(OpacityMaskMap < OpacityMaskBias ? -1 : 1); + } +} + + +// Calculate a light: +struct lightOut { + float Specular; + float3 Color; +}; + +lightOut CalculateLight(bool lightEnable, int lightType, float lightAtten, float3 lightPos, float3 vertWorldPos, + float3 lightColor, float lightIntensity, float3 lightDir, float lightConeAngle, float lightFallOff, float4x4 lightViewPrjMatrix, + uniform Texture2D lightShadowMap, bool lightShadowOn, float3 vertexNormal, float3 normal, float3 diffuseColorIn, + float3 eyeVec, float roughness, float3 specularColorIn, float3 thickness, float softenMask, + float gammaCorrection, float opacity, float3 ambientOcclusion, float3 skinOcclusion, float2 screenCoord, float2 size, float scatteringRadius) { + lightOut OUT = (lightOut)0; + + OUT.Specular = 0.0; + OUT.Color = float3(0, 0, 0); + + if (lightEnable) { + // For Maya, flip the lightDir: +#ifdef _MAYA_ + lightDir = -lightDir; +#endif + + bool isAmbientLight = (lightType == 5); + if (isAmbientLight) { + OUT.Color = diffuseColorIn * lightColor * lightIntensity; + OUT.Color.rgb *= ambientOcclusion; + return OUT; + } + + bool isDirectionalLight = (lightType == 4); + float3 lightVec = lerp(lightPos - vertWorldPos, lightDir, isDirectionalLight); + + float3 L = normalize(lightVec); + + // Diffuse: + float3 diffuseDirect = float3(0, 0, 0); + float3 scatter = float3(skinCoeffX, skinCoeffY, skinCoeffZ); + diffuseDirect = PennerSkin(scatter, normal, L, vertexNormal, 1 - (scatteringRadius*skinScattering)) * diffuseColorIn; + //diffuseDirect = PennerSkinNoLUT(scatter,normal,L, vertexNormal) * diffuseColorIn; + + // Specular: + float3 specularDirect = float3(0, 0, 0); + + float3 Lobe1 = KelemenSzirmaykalos(normal, L, eyeVec, roughness, specularColorIn); + float3 Lobe2 = KelemenSzirmaykalos(normal, L, eyeVec, roughness*0.5, specularColorIn); + + specularDirect = Lobe2 * LobeMix + Lobe1 * (1 - LobeMix); + + // Light Attenuation: + bool enableAttenuation = lightAtten > 0.0001f; + float attenuation = 1.0f; + if (!isDirectionalLight) { + attenuation = lerp(1.0, 1 / pow(length(lightVec), lightAtten), enableAttenuation); + } + + // Spot light Cone Angle: + float angle = 1; + if (lightType == 2) { + angle = lightConeangle(lightConeAngle, lightFallOff, lightVec, lightDir); + } + + // Shadows: + float shadow = 1; + float3 skinShadow = float3(1, 1, 1); + float3 softShadow = float3(1, 1, 1); + if (UseShadows && lightShadowOn) { + shadow = lightShadow(lightViewPrjMatrix, lightShadowMap, vertWorldPos, screenCoord, shadowBlur, size); + + skinShadow = LutTexture.Sample(SamplerAnisoClamp, float2(shadow * angle, 1 - shadowScattering)); + skinShadow = lerp(dot(float3(0.33, 0.59, 0.11), skinShadow), skinShadow, shadowSaturation); + skinShadow = lerp(skinShadow, 1, (shadow* angle)*(shadow* angle)*(shadow* angle)); + } + + float3 lightAttenuation = lightIntensity * angle * attenuation * lightColor; + + diffuseDirect *= lightIntensity * skinShadow * attenuation * lightColor; + specularDirect *= lightAttenuation * shadow; + + float3 backScattering = float3(0, 0, 0); + if (UseTranslucency) { + half backRoughness = (1 - skinScatteringRoughness) * 128; + float3 viewScattering = exp2(saturate(dot(eyeVec, -(L + (normal * 0.01)))) * backRoughness - backRoughness) * skinScatteringAmount; + float3 lightScattering = saturate(dot(-L, normal)*0.5 + 0.5) * skinAmbientScatteringAmount; + + //float3 IBLScattering = diffuseIBL; + backScattering = (viewScattering + lightScattering) * lightAttenuation * shadow * thickness; + + float3 profile = skinScatteringOuterColor * backScattering; + backScattering = profile * skinScatteringAmount; + + + /*float scale = 2e4 * (1.0 - skinScatteringAmount) / backRoughness; + + float4 shrinkedPos = float4(vertWorldPos - 0.005 * vertexNormal, 1.0); + + float4 shadowPosition = mul(shrinkedPos, lightViewPrjMatrix); + + float d1 = lightShadowMap.Sample(SamplerShadowDepth, shadowPosition.xy / shadowPosition.w); // 'd1' has a range of 0..1 + + float d2 = shadowPosition.z; // 'd2' has a range of 0..'lightFarPlane' + d1 *= skinScatteringPlane*shadowPosition.w; // So we scale 'd1' accordingly: + float d = scale * abs(d1 - d2); + + float dd = -d * d; + float3 profile = float3(0.233, 0.455, 0.649) * exp(dd / 0.0064) + + float3(0.1, 0.336, 0.344) * exp(dd / 0.0484) + + float3(0.118, 0.198, 0.0) * exp(dd / 0.187) + + float3(0.113, 0.007, 0.007) * exp(dd / 0.567) + + float3(0.358, 0.004, 0.0) * exp(dd / 1.99) + + float3(0.078, 0.0, 0.0) * exp(dd / 7.41); + backScattering = profile * saturate((0.3 + dot(L, -vertexNormal)) / 1.3) * thickness * diffuseColorIn; */ + } + + OUT.Color += diffuseDirect * skinOcclusion; + OUT.Color *= opacity; + OUT.Color += specularDirect * ambientOcclusion + backScattering; + + // Output specular and rim for opacity: + // OUT.Specular = dot(saturate(specularColor), float3(0.3f, 0.6f, 0.1f)); + } // end if light enabled + + return OUT; +} + +//------------------------------------ +// vertex shader with tessellation +//------------------------------------ +// take inputs from 3d-app +// vertex animation/skinning would happen here +SHADERDATA vt(APPDATA IN) { + SHADERDATA OUT = (SHADERDATA)0; + + // we pass vertices in world space + float4 worldPos = mul(float4(IN.position, 1), world); + OUT.worldPosition.xyz = worldPos.xyz; + +#ifdef _SUPPORTTESSELLATION_ + OUT.position = worldPos; +#else + OUT.position = float4(IN.position.xyz, 1); +#endif + + OUT.screenCoord = mul(float4(OUT.position.xyz, 1), viewPrj); + + // Pass through texture coordinates + // flip Y for Maya +#ifdef _MAYA_ + OUT.texCoord0 = float2(IN.texCoord0.x, (1.0 - IN.texCoord0.y)); + OUT.texCoord1 = float2(IN.texCoord1.x, (1.0 - IN.texCoord1.y)); + OUT.texCoord2 = float2(IN.texCoord2.x, (1.0 - IN.texCoord2.y)); +#else + OUT.texCoord0 = IN.texCoord0; + OUT.texCoord1 = IN.texCoord1; + OUT.texCoord2 = IN.texCoord2; +#endif + + // output normals in world space: + if (!SupportNonUniformScale) { + OUT.worldNormal = normalize(mul(IN.normal, (float3x3)world)); + } else { + OUT.worldNormal = normalize(mul(IN.normal, (float3x3)worldIT)); + } + + // output tangent in world space: + if (!SupportNonUniformScale) { + OUT.worldTangent.xyz = normalize(mul(IN.tangent, (float3x3)world)); + } else { + OUT.worldTangent.xyz = normalize(mul(IN.tangent, (float3x3)worldIT)); + } + + // store direction for normal map: + OUT.worldTangent.w = 1; + if (dot(cross(IN.normal.xyz, IN.tangent.xyz), IN.binormal.xyz) < 0.0) { + OUT.worldTangent.w = -1; + } + + return OUT; +} + + +//------------------------------------ +// vertex shader without tessellation +//------------------------------------ +SHADERDATA v(APPDATA IN) { + SHADERDATA OUT = vt(IN); + + // If we don't use tessellation, pass vertices in clip space: +#ifdef _SUPPORTTESSELLATION_ + OUT.position = mul(float4(OUT.position.xyz, 1), viewPrj); +#else + OUT.position = mul(float4(IN.position, 1), wvp); +#endif + + return OUT; +} + +#ifdef _SUPPORTTESSELLATION_ +//------------------------------------ +// hull shader +//------------------------------------ +// executed once per control point. +// control points can be considered the original vertices of the mesh +// outputs a control point +// run parallel with hull constant function +[domain("tri")] +[partitioning("fractional_odd")] +[outputtopology("triangle_cw")] +[patchconstantfunc("HS_Constant")] +[outputcontrolpoints(3)] +[maxtessfactor(64.0)] + +// PN-AEN without displacement fix: +// SHADERDATA HS( InputPatch IN, uint index : SV_OutputControlPointID, uint patchID : SV_PrimitiveID ) + +// PN Triangles, no crack fixes: +// SHADERDATA HS( InputPatch IN, uint index : SV_OutputControlPointID, uint patchID : SV_PrimitiveID ) + + +// PN-AEN and displacement fix +// the index buffer is made up as follows: +// the triangle vertices index (int3) // PNAEN9 and PNAEN18 +// the 3 adjacent edges vertices index (3 * int2) // PNAEN9 and PNAEN18 +// the 3 dominant edges vertices index (3 * int2) // PNAEN18 +// the dominant position vertices index (int3) // PNAEN18 +SHADERDATA HS(InputPatch IN, uint index : SV_OutputControlPointID, uint patchID : SV_PrimitiveID) { + SHADERDATA OUT = (SHADERDATA)0; + + // copy everything first: + OUT = IN[index]; + + // Compute the next output control point ID so we know which edge we're on. + const uint nextIndex = index < 2 ? index + 1 : 0; // (index + 1) % 3 + + // PN-AEN 9 and 18: + const uint neighborIndex = 3 + 2 * index; + const uint neighborNextIndex = neighborIndex + 1; + float3 myCP, neighborCP; + + // Calculate original PN control points and neighbors'. Then average. + myCP = ComputeCP(IN[index].worldPosition, IN[nextIndex].worldPosition, IN[index].worldNormal); + neighborCP = ComputeCP(IN[neighborIndex].worldPosition, IN[neighborNextIndex].worldPosition, IN[neighborIndex].worldNormal); + OUT.CP1 = (myCP + neighborCP) / 2; + + myCP = ComputeCP(IN[nextIndex].worldPosition, IN[index].worldPosition, IN[nextIndex].worldNormal); + neighborCP = ComputeCP(IN[neighborNextIndex].worldPosition, IN[neighborIndex].worldPosition, IN[neighborNextIndex].worldNormal); + OUT.CP2 = (myCP + neighborCP) / 2; + + // PN Triangles only would be: + // OUT.CP1 = ComputeCP( IN[index].worldPosition, IN[nextIndex].worldPosition, IN[index].worldNormal); + // OUT.CP2 = ComputeCP( IN[nextIndex].worldPosition, IN[index].worldPosition, IN[nextIndex].worldNormal); + + // Clipping: + OUT.clipped = ComputeClipping(OUT.worldPosition, OUT.CP1, OUT.CP2); + + // PN-AEN discontinuity code for displacement UVs: + const uint dominantEdgeIndex = 9 + 2 * index; + const uint dominantEdgeNextIndex = dominantEdgeIndex + 1; + const uint dominantVertexIndex = 15 + index; + + // Note: the order of the vertices/edges we choose here can be different per application and + // depend on how the index buffer was generated. + // These work for Maya with its PN-AEN18 primitive generator + float2 dominantEdgeUV = pickTexcoord(DisplacementTexcoord, IN[dominantEdgeIndex].texCoord0, IN[dominantEdgeIndex].texCoord1, IN[dominantEdgeIndex].texCoord2); + float2 dominantEdgeNextUV = pickTexcoord(DisplacementTexcoord, IN[dominantEdgeNextIndex].texCoord0, IN[dominantEdgeNextIndex].texCoord1, IN[dominantEdgeNextIndex].texCoord2); + float2 dominantVertexUV = pickTexcoord(DisplacementTexcoord, IN[dominantVertexIndex].texCoord0, IN[dominantVertexIndex].texCoord1, IN[dominantVertexIndex].texCoord2); + + OUT.dominantEdge = float4(dominantEdgeNextUV, dominantEdgeUV); + OUT.dominantVertex = dominantVertexUV; + + // VDM dominant normal and tangent for displacement crack fix: + OUT.dominantNormalE0 = IN[dominantEdgeNextIndex].worldNormal.xyz; + OUT.dominantNormalE1 = IN[dominantEdgeIndex].worldNormal.xyz; + OUT.dominantNormalCorner = IN[dominantVertexIndex].worldNormal.xyz; + + OUT.dominantTangentE0 = IN[dominantEdgeNextIndex].worldTangent.xyz; + OUT.dominantTangentE1 = IN[dominantEdgeIndex].worldTangent.xyz; + OUT.dominantTangentCorner = IN[dominantVertexIndex].worldTangent.xyz; + + return OUT; +} + +//------------------------------------ +// Hull shader constant function +//------------------------------------ +// executed once per patch +// outputs user defined data per patch and tessellation factor +// calculates control points for vertex and normal and passes to domain +// This hull shader passes the tessellation factors through to the HW tessellator, +// run parallel with hull function +HSCONSTANTDATA HS_Constant(const OutputPatch IN, uint patchID : SV_PrimitiveID) { + HSCONSTANTDATA OUT = (HSCONSTANTDATA)0; + + // future todo: + // triangle is on silhouette? + // triangle is facing camera? If facing backwards, reduce tessellation + // triangle lies in high frequency area of displacement map (density-based tessellation)? + + // Now setup the PNTriangle control points... + // Center control point + float3 f3E = (IN[0].CP1 + IN[0].CP2 + IN[1].CP1 + IN[1].CP2 + IN[2].CP1 + IN[2].CP2) / 6.0f; + float3 f3V = (IN[0].worldPosition + IN[1].worldPosition + IN[2].worldPosition) / 3.0f; + OUT.CPCenter = f3E + ((f3E - f3V) / 2.0f); + + // Clipping: + float4 centerViewPos = mul(float4(OUT.CPCenter, 1), viewPrj); + bool centerClipped = IsClipped(centerViewPos); + + if (IN[0].clipped && IN[1].clipped && IN[2].clipped && centerClipped) { + // If all control points are clipped, the surface cannot possibly be visible. + // Not entirely true, because displacement mapping can make them visible in the domain shader + // so we provide the user with a bias factor to avoid clipping too early + OUT.TessFactor[0] = OUT.TessFactor[1] = OUT.TessFactor[2] = 0; + } else { + // Camera based tessellation, per object. So very basic. + float3 CameraPosition = viewInv[3].xyz; + float LengthOp = length((CameraPosition - world[3].xyz)); + float DivOp = (TessellationRange / LengthOp); + float MaxOp = max(TessellationMin + DivOp, 1); + OUT.TessFactor[0] = OUT.TessFactor[1] = OUT.TessFactor[2] = MaxOp; + } + + // Inside tess factor is just the average of the edge factors + OUT.InsideTessFactor = (OUT.TessFactor[0] + OUT.TessFactor[1] + OUT.TessFactor[2]) / 3.0f; + + return OUT; +} + +//------------------------------------ +// domain shader +//------------------------------------ +// outputs the new vertices based on previous tessellation. +// also calculates new normals and uvs +// This domain shader applies contol point weighting to the barycentric coords produced by the FF tessellator +// If you wanted to do any vertex lighting, it would have to happen here. +[domain("tri")] +SHADERDATA DS(HSCONSTANTDATA HSIN, OutputPatch IN, float3 f3BarycentricCoords : SV_DomainLocation) { + SHADERDATA OUT = (SHADERDATA)0; + + // The barycentric coordinates + float fU = f3BarycentricCoords.x; + float fV = f3BarycentricCoords.y; + float fW = f3BarycentricCoords.z; + + // Precompute squares and squares * 3 + float fUU = fU * fU; + float fVV = fV * fV; + float fWW = fW * fW; + float fUU3 = fUU * 3.0f; + float fVV3 = fVV * 3.0f; + float fWW3 = fWW * 3.0f; + + // PN position: + float3 position = IN[0].worldPosition * fWW * fW + + IN[1].worldPosition * fUU * fU + + IN[2].worldPosition * fVV * fV + + IN[0].CP1 * fWW3 * fU + + IN[0].CP2 * fW * fUU3 + + IN[2].CP2 * fWW3 * fV + + IN[1].CP1 * fUU3 * fV + + IN[2].CP1 * fW * fVV3 + + IN[1].CP2 * fU * fVV3 + + HSIN.CPCenter * 6.0f * fW * fU * fV; + + // Flat position: + float3 flatPosition = IN[0].worldPosition * fW + IN[1].worldPosition * fU + IN[2].worldPosition * fV; + + // allow user to blend between PN tessellation and flat tessellation: + position = lerp(position, flatPosition, FlatTessellation); + + // Interpolate normal + float3 normal = IN[0].worldNormal * fW + IN[1].worldNormal * fU + IN[2].worldNormal * fV; + + // Normalize the interpolated normal + OUT.worldNormal = normalize(normal); + + // Compute tangent: + float3 tangent = IN[0].worldTangent.xyz * fW + IN[1].worldTangent.xyz * fU + IN[2].worldTangent.xyz * fV; + OUT.worldTangent.xyz = normalize(tangent.xyz); + + // Pass through the direction of the binormal as calculated in the vertex shader + OUT.worldTangent.w = IN[0].worldTangent.w; + + // Linear interpolate the texture coords + OUT.texCoord0 = IN[0].texCoord0 * fW + IN[1].texCoord0 * fU + IN[2].texCoord0 * fV; + OUT.texCoord1 = IN[0].texCoord1 * fW + IN[1].texCoord1 * fU + IN[2].texCoord1 * fV; + OUT.texCoord2 = IN[0].texCoord2 * fW + IN[1].texCoord2 * fU + IN[2].texCoord2 * fV; + + // apply displacement map (only when not rendering the Maya preview swatch): + if (UseDisplacementMap && !IsSwatchRender) { + // Fix Displacement Seams. + // we assume here that the displacement UVs is UVset 0. + // if this UVset index is changed, it should als be changed in the hull shader + // PN-AEN 18 with displacement UV seam fix + float2 displaceUV = pickTexcoord(DisplacementTexcoord, OUT.texCoord0, OUT.texCoord1, OUT.texCoord2); + float3 displacementUVW = PickDominant(float3(displaceUV, 0), fU, fV, fW, + float3(IN[0].dominantEdge.xy, 0), float3(IN[0].dominantEdge.zw, 0), + float3(IN[1].dominantEdge.xy, 0), float3(IN[1].dominantEdge.zw, 0), + float3(IN[2].dominantEdge.xy, 0), float3(IN[2].dominantEdge.zw, 0), + float3(IN[0].dominantVertex.xy, 0), + float3(IN[1].dominantVertex.xy, 0), + float3(IN[2].dominantVertex.xy, 0)); + + // We can still get cracks here because the world tangent and normal may be different for vertices on each side of the UV seam, + // because we do the tangent to world conversion, we get the same diplacement amount, but it results in different movement once converted to world space. + // And even a tiny difference between normal or tangent will cause large cracks. + float3 displacementNormal = PickDominant(OUT.worldNormal, + fU, fV, fW, + IN[0].dominantNormalE0, IN[0].dominantNormalE1, + IN[1].dominantNormalE0, IN[1].dominantNormalE1, + IN[2].dominantNormalE0, IN[2].dominantNormalE1, + IN[0].dominantNormalCorner, + IN[1].dominantNormalCorner, + IN[2].dominantNormalCorner); + + displacementNormal = normalize(displacementNormal); + + if (DisplacementModel == 1) { // Tangent Vector Displacement + float3 displacementTangent = PickDominant(OUT.worldTangent.xyz, fU, fV, fW, + IN[0].dominantTangentE0, IN[0].dominantTangentE1, + IN[1].dominantTangentE0, IN[1].dominantTangentE1, + IN[2].dominantTangentE0, IN[2].dominantTangentE1, + IN[0].dominantTangentCorner, + IN[1].dominantTangentCorner, + IN[2].dominantTangentCorner); + + displacementTangent = normalize(displacementTangent); + + float3 vecDisp = DisplacementTexture.SampleLevel(SamplerAnisoWrap, displacementUVW.xy, 0).xyz; + vecDisp -= DisplacementOffset; + + float3 Bn = cross(displacementNormal, displacementTangent); + float3x3 toWorld = float3x3(displacementTangent, Bn.xyz, displacementNormal); + + float3 VDMcoordSys = vecDisp.xzy; // Mudbox + if (VectorDisplacementCoordSys == 1) { + VDMcoordSys = vecDisp.xyz; // Maya or ZBrush + } + + float3 vecDispW = mul(VDMcoordSys, toWorld) * DisplacementHeight; + position.xyz += vecDispW; + } else { + // offset (-0.5) so that we can have negative displacement also + float offset = DisplacementTexture.SampleLevel(SamplerAnisoWrap, displacementUVW.xy, 0).x - DisplacementOffset; + position.xyz += displacementNormal * offset * DisplacementHeight; + } + } + + // Update World Position value for inside pixel shader: + OUT.worldPosition = position.xyz; + + // Transform model position with view-projection matrix + //OUT.position = float4(position.xyz, 1); // with geo + OUT.position = mul(float4(position.xyz, 1), viewPrj); // without geo + + return OUT; +} + +//------------------------------------ +// Geometry Shader +//------------------------------------ +// This is a sample Geo shader. Disabled in this shader, but left here for your reference. +// If you wish to enable it, search for 'with geo' in this shader for code to change. +[maxvertexcount(3)] // Declaration for the maximum number of vertices to create +void GS(triangle SHADERDATA IN[3], inout TriangleStream TriStream) { + SHADERDATA OUT; + + // quick test to see if geo also works: + for (int i = 0; i<3; ++i) { + OUT = IN[i]; + OUT.position = mul(mul(float4(OUT.position.xyz, 1), view), prj); + TriStream.Append(OUT); + } + TriStream.RestartStrip(); // end triangle +} +#endif + +void sampleMasks() { + +} + +//------------------------------------ +// pixel shader +//------------------------------------ +float4 f(SHADERDATA IN, bool FrontFace : SV_IsFrontFace) : SV_Target { +#ifdef _3DSMAX_ + FrontFace = !FrontFace; +#endif + // clip are early as possible + float2 opacityMaskUV = pickTexcoord(OpacityMaskTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + OpacityMaskClip(opacityMaskUV); + + float gammaCorrection = lerp(1.0, 2.2, LinearSpaceLighting); + + float3 N = normalize(IN.worldNormal.xyz); + if (flipBackfaceNormals) { + N = lerp(-N, N, FrontFace); + } + float3 Nw = N; + + // Tangent and BiNormal: + float3 T = normalize(IN.worldTangent.xyz); + float3 Bn = cross(N, T); + Bn *= IN.worldTangent.w; + + float4 diffuse = float4(1, 1, 1, 1); + if (UseDiffuseTexture) { + float2 diffuseUV = pickTexcoord(DiffuseTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float4 diffuseTextureSample = DiffuseTexture.Sample(SamplerAnisoWrap, diffuseUV); + + if (UseDiffuseTextureAlpha) { + diffuse.a = diffuseTextureSample.a; + } + + diffuse.rgb *= pow(diffuseTextureSample.rgb, gammaCorrection); + } + + float3 microNormal = float3(0, 0, 1); + if (UseNormalTexture) { + float3x3 toWorld = float3x3(T, Bn, N); + + float2 normalUV = pickTexcoord(NormalTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float3 NormalMap = NormalTexture.Sample(SamplerAnisoWrap, normalUV).xyz * 2.0 - 1.0; + float3 backupNormal = NormalMap; + + if (NormalCoordsysX > 0) + NormalMap.x = -NormalMap.x; + if (NormalCoordsysY > 0) + NormalMap.y = -NormalMap.y; + + NormalMap.xy *= NormalHeight; + + if (UseMicroNormalTexture) { + float2 normalUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + microNormal = MicroNormalTexture.Sample(SamplerAnisoWrap, normalUV * MicroScale).xyz * 2.0 - 1.0; + + microNormal.xy *= MicroNormalHeight; + NormalMap.xy += microNormal.xy; + } + + if (UseBlendTexture) { + float2 blendUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + + + + + + + } + NormalMap = mul(NormalMap.xyz, toWorld); + N = normalize(NormalMap); + } else { + if (UseMicroNormalTexture) { + float3x3 toWorld = float3x3(T, Bn, N); + + float2 normalUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + microNormal = MicroNormalTexture.Sample(SamplerAnisoWrap, normalUV * MicroScale).xyz * 2.0 - 1.0; + + microNormal.xy *= MicroNormalHeight; + microNormal = mul(microNormal.xyz, toWorld); + } + } + + diffuse.rgb *= DiffuseColor; + + float3 blurredNormal = lerp(N, Nw, NormalBlurring); + + float3 V = normalize(viewInv[3].xyz - IN.worldPosition.xyz); + + float4 specular = float4(0.028, 0.028, 0.028, 1); + specular.rgb *= SpecularColor; + + if (UseSpecularTexture) { + float2 opacityUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float4 SpecularTextureSample = SpecularTexture.Sample(SamplerAnisoWrap, opacityUV); + + specular.rgb *= pow(SpecularTextureSample.rgb, gammaCorrection); + + if (UseSpecularTextureAlpha) { + specular.a = SpecularTextureSample.a; + } + } + + float cavity = 1; + if (UseCavityTexture) { + float2 cavityUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float CavityTextureSample = CavityTexture.Sample(SamplerAnisoWrap, cavityUV); + + cavity = lerp(1, pow(CavityTextureSample, gammaCorrection), CavityAmount); + } + + float microCavity = 1; + if (UseMicroCavityTexture) { + float2 cavityUV = pickTexcoord(SpecularTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float MicroCavityTextureSample = MicroCavityTexture.Sample(SamplerAnisoWrap, cavityUV * MicroScale); + + microCavity = lerp(1, pow(MicroCavityTextureSample, gammaCorrection), MicroCavityAmount); + } + + specular.rgb *= cavity * microCavity; // We apply cavity on the specular before it is sent to the fresnel + + float roughness = Roughness; + if (UseSpecularTextureAlpha) { + roughness *= specular.a; + } + + float scatteringRadius = 1; + if (UseScatteringRadiusTexture) { + float2 scatteringUV = pickTexcoord(DiffuseTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float4 scatteringRadiusTextureSample = ScatteringRadiusTexture.Sample(SamplerAnisoWrap, scatteringUV); + + scatteringRadius *= pow(scatteringRadiusTextureSample, gammaCorrection); + } + + // Opacity: + float opacity = saturate(diffuse.a * Opacity); + + // Occlusion: + float3 ambientOcclusion = float3(1, 1, 1); + if (UseAmbientOcclusionTexture) { + float2 aomapUV = pickTexcoord(OcclusionTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + float3 aomapTextureSample = OcclusionTexture.Sample(SamplerAnisoWrap, aomapUV).rgb; + ambientOcclusion *= lerp(1, pow(aomapTextureSample.rgb, gammaCorrection), OcclusionAmount); + } + + float3 thickness = float3(1, 1, 1); + if (UseThicknessTexture) { + float2 thicknessUV = pickTexcoord(ThicknessTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + thickness = pow(BackScatteringThicknessTexture.Sample(SamplerAnisoWrap, thicknessUV), gammaCorrection).xyz; + } + + float3 skinOcclusion = coloredOcclusion(diffuse, ambientOcclusion); // Colored occlusion for skin + + float softenMask = 1.0f; + + float2 screenCoord = IN.screenCoord.xy / IN.screenCoord.w; + //float2 currentScreenSize = screenSize; // TO DO FIND A WAY TO GET SCREEN SIZE, MAYA BUG ? + float2 currentScreenSize = float2(1024, 512); + + // -------- + // LIGHTS: + // -------- + // future todo: Maya could pass light info in array so we can loop any number of lights. + + // light 0: + lightOut light0 = CalculateLight(light0Enable, light0Type, light0AttenScale, light0Pos, IN.worldPosition.xyz, + light0Color, light0Intensity, light0Dir, light0ConeAngle, light0FallOff, light0Matrix, + light0ShadowMap, light0ShadowOn, blurredNormal, N, diffuse, V, roughness, specular, + thickness, softenMask, gammaCorrection, opacity, ambientOcclusion, skinOcclusion, screenCoord, currentScreenSize, scatteringRadius); + + // light 1: + lightOut light1 = CalculateLight(light1Enable, light1Type, light1AttenScale, light1Pos, IN.worldPosition.xyz, + light1Color, light1Intensity, light1Dir, light1ConeAngle, light1FallOff, light1Matrix, + light1ShadowMap, light1ShadowOn, blurredNormal, N, diffuse, V, roughness, specular, + thickness, softenMask, gammaCorrection, opacity, ambientOcclusion, skinOcclusion, screenCoord, currentScreenSize, scatteringRadius); + + // light 2: + lightOut light2 = CalculateLight(light2Enable, light2Type, light2AttenScale, light2Pos, IN.worldPosition.xyz, + light2Color, light2Intensity, light2Dir, light2ConeAngle, light2FallOff, light2Matrix, + light2ShadowMap, light2ShadowOn, blurredNormal, N, diffuse, V, roughness, specular, + thickness, softenMask, gammaCorrection, opacity, ambientOcclusion, skinOcclusion, screenCoord, currentScreenSize, scatteringRadius); + + float3 lightTotal = light0.Color + light1.Color + light2.Color; + + + // ---------------------- + // IMAGE BASED LIGHTING + // ---------------------- + + // Specular IBL + float3 specularIBL = float3(0, 0, 0); + bool reflectMapUsed = UseSpecCubeIBL; + if (reflectMapUsed) { + int lod = 7; // Hard coded mip map level + + float3 reflectionVector = reflect(-V, N); + + reflectionVector = RotateVectorYaw(reflectionVector, SkyRotation); + reflectionVector = normalize(reflectionVector); + float NdotV = saturate(dot(N, V)); + float3 F = F_LagardeSchlick(specular, 1 - roughness, NdotV); + + specularIBL += SpecularCubeIBL.SampleLevel(CubeMapSampler, reflectionVector, lod * roughness).rgb * F; + } + + // Diffuse IBL + float3 diffuseIBL = float3(0, 0, 0); + bool useDiffuseIBL = UseDiffuseIBLMap; + if (useDiffuseIBL) { + // We use the world normal to sample the lighting texture + float3 diffuseIBLVec_High = N; + float3 diffuseIBLVec_Low = blurredNormal; + + diffuseIBLVec_High = RotateVectorYaw(diffuseIBLVec_High, SkyRotation); + diffuseIBLVec_High = normalize(diffuseIBLVec_High); + + diffuseIBLVec_Low = RotateVectorYaw(diffuseIBLVec_Low, SkyRotation); + diffuseIBLVec_Low = normalize(diffuseIBLVec_Low); + + float3 diffuseIBL_High = DiffuseCubeIBL.SampleLevel(CubeMapSampler, diffuseIBLVec_High, 0).rgb; + float3 diffuseIBL_Low = DiffuseCubeIBL.SampleLevel(CubeMapSampler, diffuseIBLVec_Low, 0).rgb; + + diffuseIBL = diffuseSkinIBL(float3(skinCoeffX, skinCoeffY, skinCoeffZ), diffuseIBL_High, diffuseIBL_Low); + } + + // ---------------------- + // FINAL COLOR AND ALPHA: + // ---------------------- + + float3 result = float3(0, 0, 0); + + result += diffuse * diffuseIBL * DiffuseIBLIntensity * skinOcclusion; + + result += specularIBL * SpecularIBLIntensity * specularOcclusion(N, V, ambientOcclusion); + + result += lightTotal; + + //result = N; + + // do gamma correction in shader: + if (!MayaFullScreenGamma) + result = pow(result, 1 / gammaCorrection); + + // final alpha: + float transparency = opacity; + transparency = saturate(transparency); // keep 0-1 range + + return float4(result, transparency); +} + + +#ifdef _MAYA_ +void Peel(SHADERDATA IN) { + float currZ = abs(mul(float4(IN.worldPosition, 1.0f), view).z); + + float4 Pndc = mul(float4(IN.worldPosition, 1.0f), viewPrj); + float2 UV = Pndc.xy / Pndc.w * float2(0.5f, -0.5f) + 0.5f; + float prevZ = transpDepthTexture.Sample(SamplerShadowDepth, UV).r; + float opaqZ = opaqueDepthTexture.Sample(SamplerShadowDepth, UV).r; + float bias = 0.00002f; + + if (currZ < prevZ * (1.0f + bias) || currZ > opaqZ * (1.0f - bias)) { + discard; + } +} + +float4 LinearDepth(SHADERDATA IN) { + return abs(mul(float4(IN.worldPosition, 1.0f), view).z); +} + +float4 DepthComplexity(float opacity) { + return opacity > 0.001f ? 1.0f : 0.0f; +} + +struct MultiOut2 { + float4 target0 : SV_Target0; + float4 target1 : SV_Target1; +}; + +MultiOut2 fTransparentPeel(SHADERDATA IN, bool FrontFace : SV_IsFrontFace) { + Peel(IN); + + MultiOut2 OUT; + OUT.target0 = f(IN, FrontFace); + OUT.target1 = LinearDepth(IN); + return OUT; +} + +MultiOut2 fTransparentPeelAndAvg(SHADERDATA IN, bool FrontFace : SV_IsFrontFace) { + Peel(IN); + + MultiOut2 OUT; + OUT.target0 = f(IN, FrontFace); + OUT.target1 = DepthComplexity(OUT.target0.w); + return OUT; +} + +MultiOut2 fTransparentWeightedAvg(SHADERDATA IN, bool FrontFace : SV_IsFrontFace) { + MultiOut2 OUT; + OUT.target0 = f(IN, FrontFace); + OUT.target1 = DepthComplexity(OUT.target0.w); + return OUT; +} + +//------------------------------------ +// wireframe pixel shader +//------------------------------------ +float4 fwire(SHADERDATA IN) : SV_Target { + return float4(0, 0, 1, 1); +} + + +//------------------------------------ +// pixel shader for shadow map generation +//------------------------------------ +//float4 ShadowMapPS( float3 Pw, float4x4 shadowViewProj ) +float4 ShadowMapPS(SHADERDATA IN) : SV_Target { + // clip as early as possible + float2 opacityMaskUV = pickTexcoord(OpacityMaskTexcoord, IN.texCoord0, IN.texCoord1, IN.texCoord2); + OpacityMaskClip(opacityMaskUV); + + float4 Pndc = mul(float4(IN.worldPosition, 1.0f), viewPrj); + + // divide Z and W component from clip space vertex position to get final depth per pixel + float retZ = Pndc.z / Pndc.w; + + retZ += fwidth(retZ); + return retZ.xxxx; +} +#endif + +//----------------------------------- +// Objects without tessellation +//------------------------------------ +technique11 TessellationOFF < + bool overridesDrawState = false; // we do not supply our own render state settings + int isTransparent = 3; + // objects with clipped pixels need to be flagged as isTransparent to avoid the occluding underlying geometry since Maya renders the object with flat shading when computing depth + string transparencyTest = "Opacity < 1.0 || (UseDiffuseTexture && UseDiffuseTextureAlpha) || UseOpacityMaskTexture"; + // 'VariableNameAsAttributeName = false' can be used to tell Maya's DX11ShaderNode to use the UIName annotation string for the Maya attribute name instead of the shader variable name. + // When changing this option, the attribute names generated for the shader inside Maya will change and this can have the side effect that older scenes have their shader attributes reset to default. + // bool VariableNameAsAttributeName = false; + +#ifdef _MAYA_ + // Tells Maya that the effect supports advanced transparency algorithm, + // otherwise Maya would render the associated objects simply by alpha + // blending on top of other objects supporting advanced transparency + // when the viewport transparency algorithm is set to depth-peeling or + // weighted-average. + bool supportsAdvancedTransparency = true; +#endif +> +{ + pass p0 < string drawContext = "colorPass"; > { // tell maya during what draw context this shader should be active, in this case 'Color' + // even though overrideDrawState is false, we still set the pre-multiplied alpha state here in + // case Maya is using 'Depth Peeling' transparency algorithm + // This unfortunately won't solve sorting issues, but at least our object can draw transparent. + // If we don't set this, the object will always be opaque. + // In the future, hopefully ShaderOverride nodes can participate properly in Maya's Depth Peeling setup +#ifdef _MAYA_ + SetBlendState(PMAlphaBlending, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF); +#endif + SetVertexShader(CompileShader(vs_5_0, v())); + SetHullShader(NULL); + SetDomainShader(NULL); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, f())); + } + +#ifdef _MAYA_ + pass pTransparentPeel < string drawContext = "transparentPeel"; > { // Depth-peeling pass for depth-peeling transparency algorithm. + SetVertexShader(CompileShader(vs_5_0, v())); + SetHullShader(NULL); + SetDomainShader(NULL); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentPeel())); + } + + pass pTransparentPeelAndAvg < string drawContext = "transparentPeelAndAvg"; > { // Weighted-average pass for depth-peeling transparency algorithm. + SetVertexShader(CompileShader(vs_5_0, v())); + SetHullShader(NULL); + SetDomainShader(NULL); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentPeelAndAvg())); + } + + pass pTransparentWeightedAvg < string drawContext = "transparentWeightedAvg"; > { // Weighted-average algorithm. No peeling. + SetVertexShader(CompileShader(vs_5_0, v())); + SetHullShader(NULL); + SetDomainShader(NULL); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentWeightedAvg())); + } + + pass pShadow < string drawContext = "shadowPass"; > { + SetVertexShader(CompileShader(vs_5_0, v())); + SetHullShader(NULL); + SetDomainShader(NULL); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, ShadowMapPS())); + } +#endif +} + +#ifdef _SUPPORTTESSELLATION_ +//----------------------------------- +// Objects with tessellation +//------------------------------------ +// Vertex Index Buffer options: +// index_buffer_type: None; // no divergent normals and no displacement crack fix +// index_buffer_type: PNAEN9; // divergent normals crack fix; no displacement UV seam crack fix +// index_buffer_type: PNAEN18, // crack fix for divergent normals and UV seam displacement +technique11 TessellationON < + string index_buffer_type = "PNAEN18"; // tell Maya what type of index buffer we want. Must be unique name per generator + bool overridesDrawState = false; + int isTransparent = 3; + string transparencyTest = "Opacity < 1.0 || (UseDiffuseTexture && UseDiffuseTextureAlpha) || UseOpacityMaskTexture"; + bool supportsAdvancedTransparency = true; > { + pass p0 < string drawContext = "colorPass"; > { + SetBlendState(PMAlphaBlending, float4(0.0f, 0.0f, 0.0f, 0.0f), 0xFFFFFFFF); + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); // without geo + //SetGeometryShader( CompileShader(gs_5_0, GS()) ); // with geo + SetPixelShader(CompileShader(ps_5_0, f())); + } + + pass pTransparentPeel < string drawContext = "transparentPeel";> { // Depth-peeling pass for depth-peeling transparency algorithm. + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentPeel())); + } + + pass pTransparentPeelAndAvg < string drawContext = "transparentPeelAndAvg"; > { // Weighted-average pass for depth-peeling transparency algorithm. + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentPeelAndAvg())); + } + + pass pTransparentWeightedAvg < string drawContext = "transparentWeightedAvg"; > { // Weighted-average algorithm. No peeling. + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, fTransparentWeightedAvg())); + } + + pass pShadow < string drawContext = "shadowPass"; > { + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_5_0, ShadowMapPS())); + } +} + +//----------------------------------- +// Wireframe +//------------------------------------ +technique11 WireFrame < + string index_buffer_type = "PNAEN18"; + bool overridesDrawState = false; // since we only change the fillMode, it can remain on false. If we changed the blend state, it would have to be true + int isTransparent = 0; > { + pass p0 < string drawContext = "colorPass"; > { + SetRasterizerState(WireframeCullFront); + SetVertexShader(CompileShader(vs_5_0, vt())); + SetHullShader(CompileShader(hs_5_0, HS())); + SetDomainShader(CompileShader(ds_5_0, DS())); + SetGeometryShader(NULL); // without geo + //SetGeometryShader( CompileShader(gs_5_0, GS()) ); // with geo + SetPixelShader(CompileShader(ps_5_0, fwire())); + } +} +#endif diff --git a/dna_calibration.mod b/dna_calibration.mod index 17e0bb5..96b4da3 100644 --- a/dna_calibration.mod +++ b/dna_calibration.mod @@ -21,3 +21,15 @@ PYTHONPATH +:= PYTHONPATH +:= data PYTHONPATH +:= lib/Maya2023/linux MAYA_PLUG_IN_PATH +:= lib/Maya2023/linux + ++ MAYAVERSION:2024 PLATFORM:win64 MetaHuman-DNA-Calibration any . +PYTHONPATH +:= +PYTHONPATH +:= data +PYTHONPATH +:= lib/Maya2024/windows +MAYA_PLUG_IN_PATH +:= lib/Maya2024/windows + ++ MAYAVERSION:2024 PLATFORM:linux MetaHuman-DNA-Calibration any . +PYTHONPATH +:= +PYTHONPATH +:= data +PYTHONPATH +:= lib/Maya2024/linux +MAYA_PLUG_IN_PATH +:= lib/Maya2024/linux diff --git a/examples/dna_viewer_build_rig_with_textures.py b/examples/dna_viewer_build_rig_with_textures.py new file mode 100644 index 0000000..81a7200 --- /dev/null +++ b/examples/dna_viewer_build_rig_with_textures.py @@ -0,0 +1,355 @@ +""" +This example demonstrates generating functional rig based on DNA file in Maya scene with applied textures. +Maps added in data folder belong to Ada preset character. User should use source data downloaded from Quixel Bridge. +IMPORTANT: You have to setup the environment before running this example. Please refer to the 'Environment setup' section in README.md. + +- usage in command line: + mayapy dna_viewer_build_rig_with_textures.py + NOTE: Script cannot be called with Python, it must be called with mayapy. + +- usage in Maya: + 1. copy whole content of this file to Maya Script Editor + 2. change value of ROOT_DIR to absolute path of dna_calibration, e.g. `c:/dna_calibration` in Windows or `/home/user/dna_calibration`. Important: + Use `/` (forward slash), because Maya uses forward slashes in path. +""" +import time +import os + +# if you use Maya, use absolute path +ROOT_DIR = f"{os.path.dirname(os.path.abspath(__file__))}/..".replace("\\", "/") +DATA_DIR = f"{ROOT_DIR}/data" + +from maya import cmds, mel +from dna_viewer import ( + DNA, + RigConfig, + build_rig +) + +ORIENT_Y = [0.0, 0.0, 0.0] +COMMON_MAP_INFOS = [ + ("dx11_diffuseIrradiance", 1), + ("dx11_jitter", 1), + ("dx11_skinLUT", 1), + ("dx11_specularIrradiance", 1), +] + +MAP_INFOS = [ + ("head_color", 1), + ("head_cm1_color", 0), + ("head_cm2_color", 0), + ("head_cm3_color", 0), + ("head_normal", 1), + ("head_wm1_normal", 0), + ("head_wm2_normal", 0), + ("head_wm3_normal", 0), + ("head_specular", 1), + ("head_specular_16Bits", 1), + ("head_occlusion", 1), + ("head_occlusion_16Bits", 1), + ("head_cavity", 1), + ("head_cavity_16Bits", 1), + ("head_transmission", 1), + ("head_transmission_16Bits", 1), + ("head_curvature", 1), + ("head_curvature_16Bits", 1), + ("head_position", 1), + ("head_position_16Bits", 1), + ("head_worldspace", 1), + ("head_worldspace_16Bits", 1), + ("head_bentNormal", 1), + ("head_bentNormal_16Bits", 1), + ("teeth_color", 1), + ("teeth_normal", 1), + ("eyes_color", 1), + ("eyeLeft_color", 1), + ("eyeRight_color", 1), + ("eyeLeft_normal", 1), + ("eyeRight_normal", 1), + ("eyes_color_16Bits", 1), + ("eyes_normal", 1), + ("eyes_normal_16Bits", 1), + ("eyelashes_color", 1), +] + +MASKS = [ + "head_wm1_blink_L", + "head_wm1_blink_R", + "head_wm1_browsRaiseInner_L", + "head_wm1_browsRaiseInner_R", + "head_wm1_browsRaiseOuter_L", + "head_wm1_browsRaiseOuter_R", + "head_wm1_chinRaise_L", + "head_wm1_chinRaise_R", + "head_wm1_jawOpen", + "head_wm1_purse_DL", + "head_wm1_purse_DR", + "head_wm1_purse_UL", + "head_wm1_purse_UR", + "head_wm1_squintInner_L", + "head_wm1_squintInner_R", + "head_wm2_browsDown_L", + "head_wm2_browsDown_R", + "head_wm2_browsLateral_L", + "head_wm2_browsLateral_R", + "head_wm2_mouthStretch_L", + "head_wm2_mouthStretch_R", + "head_wm2_neckStretch_L", + "head_wm2_neckStretch_R", + "head_wm2_noseWrinkler_L", + "head_wm2_noseWrinkler_R", + "head_wm3_cheekRaiseInner_L", + "head_wm3_cheekRaiseInner_R", + "head_wm3_cheekRaiseOuter_L", + "head_wm3_cheekRaiseOuter_R", + "head_wm3_cheekRaiseUpper_L", + "head_wm3_cheekRaiseUpper_R", + "head_wm3_smile_L", + "head_wm3_smile_R", + "head_wm13_lips_DL", + "head_wm13_lips_DR", + "head_wm13_lips_UL", + "head_wm13_lips_UR", +] + +MESH_SHADER_MAPPING = { + "head_lod": "head_shader", + "teeth_lod": "teeth_shader", + "saliva_lod": "saliva_shader", + "eyeLeft_lod": "eyeLeft_shader", + "eyeRight_lod": "eyeRight_shader", + "eyeshell_lod": "eyeshell_shader", + "eyelashes_lod": "eyelashes_shader", + "eyelashesShadow_lod": "eyelashesShadow_shader", + "eyeEdge_lod": "eyeEdge_shader", + "cartilage_lod": "eyeEdge_shader", +} + +SHADERS = ["head_shader", "teeth_shader", "eyeLeft_shader", "eyeRight_shader"] + +SHADER_ATTRIBUTES_MAPPING = { + "FRM_WMmultipliers.head_cm2_color_head_wm2_browsDown_L": "shader_head_shader.maskWeight_00", + "FRM_WMmultipliers.head_wm2_normal_head_wm2_browsDown_L": "shader_head_shader.maskWeight_01", + "FRM_WMmultipliers.head_cm2_color_head_wm2_browsDown_R": "shader_head_shader.maskWeight_02", + "FRM_WMmultipliers.head_wm2_normal_head_wm2_browsDown_R": "shader_head_shader.maskWeight_03", + "FRM_WMmultipliers.head_cm2_color_head_wm2_browsLateral_L": "shader_head_shader.maskWeight_04", + "FRM_WMmultipliers.head_wm2_normal_head_wm2_browsLateral_L": "shader_head_shader.maskWeight_05", + "FRM_WMmultipliers.head_cm2_color_head_wm2_browsLateral_R": "shader_head_shader.maskWeight_06", + "FRM_WMmultipliers.head_wm2_normal_head_wm2_browsLateral_R": "shader_head_shader.maskWeight_07", + "FRM_WMmultipliers.head_cm1_color_head_wm1_browsRaiseInner_L": "shader_head_shader.maskWeight_08", + "FRM_WMmultipliers.head_wm1_normal_head_wm1_browsRaiseInner_L": "shader_head_shader.maskWeight_09", + "FRM_WMmultipliers.head_cm1_color_head_wm1_browsRaiseInner_R": "shader_head_shader.maskWeight_10", + "FRM_WMmultipliers.head_wm1_normal_head_wm1_browsRaiseInner_R": "shader_head_shader.maskWeight_11", + "FRM_WMmultipliers.head_cm1_color_head_wm1_browsRaiseOuter_L": "shader_head_shader.maskWeight_12", + "FRM_WMmultipliers.head_wm1_normal_head_wm1_browsRaiseOuter_L": "shader_head_shader.maskWeight_13", + "FRM_WMmultipliers.head_cm1_color_head_wm1_browsRaiseOuter_R": "shader_head_shader.maskWeight_14", + "FRM_WMmultipliers.head_wm1_normal_head_wm1_browsRaiseOuter_R": "shader_head_shader.maskWeight_15", + "FRM_WMmultipliers.head_cm1_color_head_wm1_blink_L": "shader_head_shader.maskWeight_16", + "FRM_WMmultipliers.head_cm1_color_head_wm1_squintInner_L": "shader_head_shader.maskWeight_17", + "FRM_WMmultipliers.head_wm1_normal_head_wm1_blink_L": "shader_head_shader.maskWeight_18", + "FRM_WMmultipliers.head_wm1_normal_head_wm1_squintInner_L": "shader_head_shader.maskWeight_19", + "FRM_WMmultipliers.head_cm1_color_head_wm1_blink_R": "shader_head_shader.maskWeight_20", + "FRM_WMmultipliers.head_cm1_color_head_wm1_squintInner_R": "shader_head_shader.maskWeight_21", + "FRM_WMmultipliers.head_wm1_normal_head_wm1_blink_R": "shader_head_shader.maskWeight_22", + "FRM_WMmultipliers.head_wm1_normal_head_wm1_squintInner_R": "shader_head_shader.maskWeight_23", + "FRM_WMmultipliers.head_cm3_color_head_wm3_cheekRaiseInner_L": "shader_head_shader.maskWeight_24", + "FRM_WMmultipliers.head_cm3_color_head_wm3_cheekRaiseOuter_L": "shader_head_shader.maskWeight_25", + "FRM_WMmultipliers.head_cm3_color_head_wm3_cheekRaiseUpper_L": "shader_head_shader.maskWeight_26", + "FRM_WMmultipliers.head_wm3_normal_head_wm3_cheekRaiseInner_L": "shader_head_shader.maskWeight_27", + "FRM_WMmultipliers.head_wm3_normal_head_wm3_cheekRaiseOuter_L": "shader_head_shader.maskWeight_28", + "FRM_WMmultipliers.head_wm3_normal_head_wm3_cheekRaiseUpper_L": "shader_head_shader.maskWeight_29", + "FRM_WMmultipliers.head_cm3_color_head_wm3_cheekRaiseInner_R": "shader_head_shader.maskWeight_30", + "FRM_WMmultipliers.head_cm3_color_head_wm3_cheekRaiseOuter_R": "shader_head_shader.maskWeight_31", + "FRM_WMmultipliers.head_cm3_color_head_wm3_cheekRaiseUpper_R": "shader_head_shader.maskWeight_32", + "FRM_WMmultipliers.head_wm3_normal_head_wm3_cheekRaiseInner_R": "shader_head_shader.maskWeight_33", + "FRM_WMmultipliers.head_wm3_normal_head_wm3_cheekRaiseOuter_R": "shader_head_shader.maskWeight_34", + "FRM_WMmultipliers.head_wm3_normal_head_wm3_cheekRaiseUpper_R": "shader_head_shader.maskWeight_35", + "FRM_WMmultipliers.head_cm2_color_head_wm2_noseWrinkler_L": "shader_head_shader.maskWeight_36", + "FRM_WMmultipliers.head_wm2_normal_head_wm2_noseWrinkler_L": "shader_head_shader.maskWeight_37", + "FRM_WMmultipliers.head_cm2_color_head_wm2_noseWrinkler_R": "shader_head_shader.maskWeight_38", + "FRM_WMmultipliers.head_wm2_normal_head_wm2_noseWrinkler_R": "shader_head_shader.maskWeight_39", + "FRM_WMmultipliers.head_cm3_color_head_wm3_smile_L": "shader_head_shader.maskWeight_40", + "FRM_WMmultipliers.head_wm3_normal_head_wm3_smile_L": "shader_head_shader.maskWeight_41", + "FRM_WMmultipliers.head_cm1_color_head_wm13_lips_UL": "shader_head_shader.maskWeight_42", + "FRM_WMmultipliers.head_cm1_color_head_wm13_lips_UR": "shader_head_shader.maskWeight_43", + "FRM_WMmultipliers.head_cm1_color_head_wm13_lips_DL": "shader_head_shader.maskWeight_44", + "FRM_WMmultipliers.head_cm1_color_head_wm13_lips_DR": "shader_head_shader.maskWeight_45", + "FRM_WMmultipliers.head_wm1_normal_head_wm13_lips_UL": "shader_head_shader.maskWeight_46", + "FRM_WMmultipliers.head_wm1_normal_head_wm13_lips_UR": "shader_head_shader.maskWeight_47", + "FRM_WMmultipliers.head_wm1_normal_head_wm13_lips_DL": "shader_head_shader.maskWeight_48", + "FRM_WMmultipliers.head_wm1_normal_head_wm13_lips_DR": "shader_head_shader.maskWeight_49", + "FRM_WMmultipliers.head_cm3_color_head_wm3_smile_R": "shader_head_shader.maskWeight_50", + "FRM_WMmultipliers.head_wm3_normal_head_wm3_smile_R": "shader_head_shader.maskWeight_51", + "FRM_WMmultipliers.head_cm3_color_head_wm13_lips_UL": "shader_head_shader.maskWeight_52", + "FRM_WMmultipliers.head_cm3_color_head_wm13_lips_DL": "shader_head_shader.maskWeight_53", + "FRM_WMmultipliers.head_wm3_normal_head_wm13_lips_UL": "shader_head_shader.maskWeight_54", + "FRM_WMmultipliers.head_wm3_normal_head_wm13_lips_DL": "shader_head_shader.maskWeight_55", + "FRM_WMmultipliers.head_cm3_color_head_wm13_lips_UR": "shader_head_shader.maskWeight_56", + "FRM_WMmultipliers.head_cm3_color_head_wm13_lips_DR": "shader_head_shader.maskWeight_57", + "FRM_WMmultipliers.head_wm3_normal_head_wm13_lips_UR": "shader_head_shader.maskWeight_58", + "FRM_WMmultipliers.head_wm3_normal_head_wm13_lips_DR": "shader_head_shader.maskWeight_59", + "FRM_WMmultipliers.head_cm2_color_head_wm2_mouthStretch_L": "shader_head_shader.maskWeight_60", + "FRM_WMmultipliers.head_wm2_normal_head_wm2_mouthStretch_L": "shader_head_shader.maskWeight_61", + "FRM_WMmultipliers.head_cm2_color_head_wm2_mouthStretch_R": "shader_head_shader.maskWeight_62", + "FRM_WMmultipliers.head_wm2_normal_head_wm2_mouthStretch_R": "shader_head_shader.maskWeight_63", + "FRM_WMmultipliers.head_cm1_color_head_wm1_purse_UL": "shader_head_shader.maskWeight_64", + "FRM_WMmultipliers.head_wm1_normal_head_wm1_purse_UL": "shader_head_shader.maskWeight_65", + "FRM_WMmultipliers.head_cm1_color_head_wm1_purse_UR": "shader_head_shader.maskWeight_66", + "FRM_WMmultipliers.head_wm1_normal_head_wm1_purse_UR": "shader_head_shader.maskWeight_67", + "FRM_WMmultipliers.head_cm1_color_head_wm1_purse_DL": "shader_head_shader.maskWeight_68", + "FRM_WMmultipliers.head_wm1_normal_head_wm1_purse_DL": "shader_head_shader.maskWeight_69", + "FRM_WMmultipliers.head_cm1_color_head_wm1_purse_DR": "shader_head_shader.maskWeight_70", + "FRM_WMmultipliers.head_wm1_normal_head_wm1_purse_DR": "shader_head_shader.maskWeight_71", + "FRM_WMmultipliers.head_cm1_color_head_wm1_chinRaise_L": "shader_head_shader.maskWeight_72", + "FRM_WMmultipliers.head_wm1_normal_head_wm1_chinRaise_L": "shader_head_shader.maskWeight_73", + "FRM_WMmultipliers.head_cm1_color_head_wm1_chinRaise_R": "shader_head_shader.maskWeight_74", + "FRM_WMmultipliers.head_wm1_normal_head_wm1_chinRaise_R": "shader_head_shader.maskWeight_75", + "FRM_WMmultipliers.head_cm1_color_head_wm1_jawOpen": "shader_head_shader.maskWeight_76", + "FRM_WMmultipliers.head_wm1_normal_head_wm1_jawOpen": "shader_head_shader.maskWeight_77", + "FRM_WMmultipliers.head_cm2_color_head_wm2_neckStretch_L": "shader_head_shader.maskWeight_78", + "FRM_WMmultipliers.head_wm2_normal_head_wm2_neckStretch_L": "shader_head_shader.maskWeight_79", + "FRM_WMmultipliers.head_cm2_color_head_wm2_neckStretch_R": "shader_head_shader.maskWeight_80", + "FRM_WMmultipliers.head_wm2_normal_head_wm2_neckStretch_R": "shader_head_shader.maskWeight_81", +} + + +# Methods +def import_head_shaders(shader_scene_path, shaders_dir_path, masks_dir_path, maps_dir_path): + import_shader(shader_scene_path, MESH_SHADER_MAPPING) + + resolve_scene_shader_paths(SHADERS, shaders_dir_path) + + set_mask_textures(MASKS, masks_dir_path) + set_map_textures(COMMON_MAP_INFOS, maps_dir_path) + set_map_textures(MAP_INFOS, maps_dir_path) + + connect_attributes_to_shader(SHADER_ATTRIBUTES_MAPPING) + + +def import_shader(shader_scene_path, mesh_shader_mapping): + print("Shader scene imported") + cmds.file(shader_scene_path, options="v=0", type="mayaAscii", i=True) + try: + items = mesh_shader_mapping.iteritems() + except: + items = mesh_shader_mapping.items() + for meshName, shaderName in items: + for lodLvl in range(0, 8): + try: + # Apply shader to all meshes based on LOD level + resolved_mesh_name = meshName + str(lodLvl) + "_mesh" + shader = "shader_" + shaderName + cmds.select(resolved_mesh_name, replace=True) + mel.eval("sets -e -forceElement " + shader + "SG") + except: + print("Skipped adding shader for mesh %s." % meshName) + + +def resolve_scene_shader_paths(shaders, folder_name): + for shader in shaders: + node_name = "shader_" + shader + if not cmds.objExists(node_name): + continue + file_shader_name = cmds.getAttr(node_name + ".shader") + shader_folder_name, shader_file_name = os.path.split(file_shader_name) + shader_folder_name = folder_name + cmds.setAttr( + node_name + ".shader", + shader_folder_name + "/" + shader_file_name, + type="string", + ) + + +def set_mask_textures(masks, folder_name): + for mask in masks: + node_name = "maskFile_" + mask + + if not cmds.objExists(node_name): + continue + + file_texture_name = cmds.getAttr(node_name + ".fileTextureName") + texture_folder_name, texture_file_name = os.path.split(file_texture_name) + texture_folder_name = folder_name + cmds.setAttr( + node_name + ".fileTextureName", + texture_folder_name + "/" + texture_file_name, + type="string", + ) + + +def set_map_textures(map_infos, folder_name): + for mapInfo in map_infos: + node_name = "mapFile_" + mapInfo[0] + if mapInfo[1]: + node_name = "baseMapFile_" + mapInfo[0] + + if not cmds.objExists(node_name): + continue + + file_texture_name = cmds.getAttr(node_name + ".fileTextureName") + texture_folder_name, texture_file_name = os.path.split(file_texture_name) + texture_folder_name = folder_name + cmds.setAttr( + node_name + ".fileTextureName", + texture_folder_name + "/" + texture_file_name, + type="string", + ) + + +def connect_attributes_to_shader(shader_attributes_mapping): + print("Connecting attributes to shader...") + try: + items = shader_attributes_mapping.iteritems() + except Exception as ex: + print(f"Error: {ex}") + items = shader_attributes_mapping.items() + + for frm_attribute, shaderAttribute in items: + if cmds.objExists(frm_attribute) and cmds.objExists(shaderAttribute): + cmds.connectAttr(frm_attribute, shaderAttribute, force=True) + + +def create_lights(lights_file_path, orient): + print("Creating lights...") + cmds.file(lights_file_path, defaultNamespace=True, i=True) + cmds.xform("Lights", ro=orient) + cmds.makeIdentity("Lights", apply=True) + + +# Define all paths +dna_path = f"{DATA_DIR}/mh4/dna_files/Ada.dna" +gui_path = f"{DATA_DIR}/mh4/gui.ma" +aas_path = f"{DATA_DIR}/mh4/additional_assemble_script.py" +ac_path = f"{DATA_DIR}/analog_gui.ma" +light_scene = f"{DATA_DIR}/lights.ma" +shader_scene = f"{DATA_DIR}/shader.ma" +shaders_dir = f"{DATA_DIR}/shaders" +masks_dir = f"{DATA_DIR}/masks" +maps_dir = f"{DATA_DIR}/maps" +output_scene = f"{ROOT_DIR}/output/Ada_rig.mb" + +try: + start_time = time.time() + + # open new scene + cmds.file(new=True, force=True) + + # import DNA data + dna = DNA(dna_path) + + config = RigConfig( + gui_path=gui_path, + analog_gui_path=ac_path, + aas_path=aas_path, + ) + build_rig(dna=dna, config=config) + import_head_shaders(shader_scene, shaders_dir, masks_dir, maps_dir) + create_lights(light_scene, ORIENT_Y) + + # save scene + cmds.file(rename=output_scene) + cmds.file(save=True, type="mayaBinary") + + print("--- Import finished in %s seconds ---" % (time.time() - start_time)) +except Exception as ex: + print("Error building scene", ex)