Merge pull request #7010 from aws-lumberyard-dev/Atom/santorac/MaterialAssetDeferredBaking3
Fixed Material Builder To Avoid Reading Material Type Source File
This commit is contained in:
+1
-1
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"emissive": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"emissive": {
|
||||
"color": [
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 1,
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [ 1.0, 1.0, 1.0 ],
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"parentMaterial": "./basic.material",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 1,
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"metallic": {
|
||||
"factor": 0.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"parentMaterial": "./basic.material",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 1,
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"metallic": {
|
||||
"factor": 0.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"parentMaterial": "./basic.material",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 1,
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"metallic": {
|
||||
"factor": 0.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"parentMaterial": "./basic.material",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 1,
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"metallic": {
|
||||
"factor": 0.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"parentMaterial": "./basic.material",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 1,
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"metallic": {
|
||||
"factor": 0.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"parentMaterial": "./basic.material",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 1,
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"metallic": {
|
||||
"factor": 0.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"parentMaterial": "./basic.material",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 1,
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"metallic": {
|
||||
"factor": 0.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"parentMaterial": "./basic.material",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 1,
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"metallic": {
|
||||
"factor": 0.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"parentMaterial": "./basic.material",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 1,
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"metallic": {
|
||||
"factor": 0.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"parentMaterial": "./basic.material",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 1,
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"metallic": {
|
||||
"factor": 0.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"parentMaterial": "./basic.material",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 1,
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"metallic": {
|
||||
"factor": 0.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"parentMaterial": "./basic.material",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 1,
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"metallic": {
|
||||
"factor": 1.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"parentMaterial": "./basic.material",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 1,
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"metallic": {
|
||||
"factor": 1.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"parentMaterial": "./basic.material",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 1,
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"metallic": {
|
||||
"factor": 1.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"parentMaterial": "./basic.material",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 1,
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"metallic": {
|
||||
"factor": 1.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"parentMaterial": "./basic.material",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 1,
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"metallic": {
|
||||
"factor": 1.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"parentMaterial": "./basic.material",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 1,
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"metallic": {
|
||||
"factor": 1.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"parentMaterial": "./basic.material",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 1,
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"metallic": {
|
||||
"factor": 1.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"parentMaterial": "./basic.material",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 1,
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"metallic": {
|
||||
"factor": 1.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"parentMaterial": "./basic.material",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 1,
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"metallic": {
|
||||
"factor": 1.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"parentMaterial": "./basic.material",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 1,
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"metallic": {
|
||||
"factor": 1.0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"parentMaterial": "./basic.material",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 1,
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"metallic": {
|
||||
"factor": 1.0
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"parentMaterial": "Materials/Presets/PBR/default_grid.material",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"opacity": {
|
||||
"mode": "Blended"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 1,
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [ 0.18, 0.18, 0.18 ],
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/Skin.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"wrinkleLayers": {
|
||||
"count": 3,
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"general": {
|
||||
"enableShadows": false,
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"general": {
|
||||
"enableShadows": false,
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"textureMap": "Textures/Default/default_basecolor.tif"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials\\Types\\StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"materialType": "ReflectionProbeVisualization.materialtype",
|
||||
"propertyLayoutVersion": 1,
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"general": {
|
||||
"enableShadows": false,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"propertyLayoutVersion": 1,
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [ 0.18, 0.18, 0.18 ],
|
||||
|
||||
@@ -24,13 +24,6 @@ namespace AZ
|
||||
AZ_RTTI(AZ::RPI::JsonMaterialPropertyValueSerializer, "{A52B1ED8-C849-4269-9AA7-9D0814D2EC59}", BaseJsonSerializer);
|
||||
AZ_CLASS_ALLOCATOR_DECL;
|
||||
|
||||
//! A LoadContext object must be passed down to the serializer via JsonDeserializerContext::GetMetadata().Add(...)
|
||||
struct LoadContext
|
||||
{
|
||||
AZ_TYPE_INFO(JsonMaterialPropertyValueSerializer::LoadContext, "{5E0A891A-27F6-4AD7-88A5-B9EA50F88B45}");
|
||||
uint32_t m_materialTypeVersion; //!< The version number from the .materialtype file
|
||||
};
|
||||
|
||||
JsonSerializationResult::Result Load(void* outputValue, const Uuid& outputValueTypeId, const rapidjson::Value& inputValue,
|
||||
JsonDeserializerContext& context) override;
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ namespace AZ
|
||||
//! The resolved value with a valid type of a property. It needs to be mutable to allow post-resolving when parent objects are declared as const.
|
||||
mutable MaterialPropertyValue m_resolvedValue;
|
||||
//! Candidate values from serialization.
|
||||
AZStd::map<AZ::TypeId, MaterialPropertyValue> m_possibleValues;
|
||||
AZStd::map<AZ::TypeId, MaterialPropertyValue> m_possibleValues;
|
||||
};
|
||||
} // namespace RPI
|
||||
} // namespace AZ
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <Atom/RPI.Edit/Material/MaterialSourceData.h>
|
||||
#include <AzCore/Serialization/Json/BaseJsonSerializer.h>
|
||||
|
||||
namespace AZ
|
||||
{
|
||||
class ReflectContext;
|
||||
|
||||
namespace RPI
|
||||
{
|
||||
//! This custom serializer is needed to load the material type file and saves its data in the
|
||||
//! JsonDeserializerSettings for JsonMaterialPropertyValueSerializer to use.
|
||||
//! (Note we could have made a custom serializer specifically for the 'materialType' field but that
|
||||
//! would require 'materialType' to appear before 'properties'. By having a custom serializer for the common
|
||||
//! parent of 'materialType' and 'properties', we can avoid an order dependency within the JSON file).
|
||||
class JsonMaterialSourceDataSerializer
|
||||
: public BaseJsonSerializer
|
||||
{
|
||||
public:
|
||||
AZ_RTTI(AZ::RPI::JsonMaterialSourceDataSerializer, "{008A7423-8DF6-4BA3-BF5E-B0C189CCBE58}", BaseJsonSerializer);
|
||||
AZ_CLASS_ALLOCATOR_DECL;
|
||||
|
||||
JsonSerializationResult::Result Load(void* outputValue, const Uuid& outputValueTypeId, const rapidjson::Value& inputValue,
|
||||
JsonDeserializerContext& context) override;
|
||||
|
||||
JsonSerializationResult::Result Store(rapidjson::Value& outputValue, const void* inputValue,
|
||||
const void* defaultValue, const Uuid& valueTypeId, JsonSerializerContext& context) override;
|
||||
};
|
||||
|
||||
} // namespace RPI
|
||||
} // namespace AZ
|
||||
@@ -186,9 +186,8 @@ namespace AZ
|
||||
//! Searches for a specific property.
|
||||
//! Note this function can find properties using old versions of the property name; in that case,
|
||||
//! the name in the returned PropertyDefinition* will not match the @propertyName that was searched for.
|
||||
//! @param materialTypeVersion indicates the version number of the property name being passed in. Only renames above this version number will be applied.
|
||||
//! @return the requested property, or null if it could not be found
|
||||
const PropertyDefinition* FindProperty(AZStd::string_view groupName, AZStd::string_view propertyName, uint32_t materialTypeVersion = 0) const;
|
||||
const PropertyDefinition* FindProperty(AZStd::string_view groupName, AZStd::string_view propertyName) const;
|
||||
|
||||
//! Construct a complete list of group definitions, including implicit groups, arranged in the same order as the source data
|
||||
//! Groups with the same name will be consolidated into a single entry
|
||||
@@ -212,9 +211,8 @@ namespace AZ
|
||||
Outcome<Data::Asset<MaterialTypeAsset>> CreateMaterialTypeAsset(Data::AssetId assetId, AZStd::string_view materialTypeSourceFilePath = "", bool elevateWarnings = true) const;
|
||||
|
||||
//! Possibly renames @propertyId based on the material version update steps.
|
||||
//! @param materialTypeVersion indicates the version number of the property name being passed in. Only renames above this version number will be applied.
|
||||
//! @return true if the property was renamed
|
||||
bool ApplyPropertyRenames(MaterialPropertyId& propertyId, uint32_t materialTypeVersion = 0) const;
|
||||
bool ApplyPropertyRenames(MaterialPropertyId& propertyId) const;
|
||||
};
|
||||
|
||||
//! The wrapper class for derived material functors.
|
||||
|
||||
@@ -52,7 +52,7 @@ namespace AZ
|
||||
{
|
||||
AssetBuilderSDK::AssetBuilderDesc materialBuilderDescriptor;
|
||||
materialBuilderDescriptor.m_name = JobKey;
|
||||
materialBuilderDescriptor.m_version = 115; // material dependency improvements updated
|
||||
materialBuilderDescriptor.m_version = 116; // more material dependency improvements
|
||||
materialBuilderDescriptor.m_patterns.push_back(AssetBuilderSDK::AssetBuilderPattern("*.material", AssetBuilderSDK::AssetBuilderPattern::PatternType::Wildcard));
|
||||
materialBuilderDescriptor.m_patterns.push_back(AssetBuilderSDK::AssetBuilderPattern("*.materialtype", AssetBuilderSDK::AssetBuilderPattern::PatternType::Wildcard));
|
||||
materialBuilderDescriptor.m_busId = azrtti_typeid<MaterialBuilder>();
|
||||
|
||||
@@ -128,7 +128,7 @@ namespace AZ
|
||||
if (auto* serialize = azrtti_cast<SerializeContext*>(context))
|
||||
{
|
||||
serialize->Class<MaterialAssetBuilderComponent, SceneAPI::SceneCore::ExportingComponent>()
|
||||
->Version(21); // material dependency improvements updated
|
||||
->Version(22); // more material dependency improvements
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
|
||||
#include <Atom/RPI.Edit/Material/MaterialPropertyValueSerializer.h>
|
||||
#include <Atom/RPI.Edit/Material/MaterialTypeSourceData.h>
|
||||
#include <Atom/RPI.Edit/Material/MaterialSourceDataSerializer.h>
|
||||
#include <Atom/RPI.Edit/Material/MaterialPropertySerializer.h>
|
||||
|
||||
#include <AzCore/Math/Color.h>
|
||||
@@ -55,64 +54,71 @@ namespace AZ
|
||||
MaterialSourceData::Property* property = reinterpret_cast<MaterialSourceData::Property*>(outputValue);
|
||||
AZ_Assert(property, "Output value for JsonMaterialPropertyValueSerializer can't be null.");
|
||||
|
||||
const MaterialTypeSourceData* materialType = context.GetMetadata().Find<MaterialTypeSourceData>();
|
||||
if (!materialType)
|
||||
{
|
||||
AZ_Assert(false, "Material type reference not found");
|
||||
return context.Report(JsonSerializationResult::Tasks::ReadField, JsonSerializationResult::Outcomes::Catastrophic, "Material type reference not found.");
|
||||
}
|
||||
|
||||
const JsonMaterialPropertyValueSerializer::LoadContext* loadContext = context.GetMetadata().Find<JsonMaterialPropertyValueSerializer::LoadContext>();
|
||||
|
||||
// Construct the full property name (groupName.propertyName) by parsing it from the JSON path string.
|
||||
size_t startPropertyName = context.GetPath().Get().rfind('/');
|
||||
size_t startGroupName = context.GetPath().Get().rfind('/', startPropertyName-1);
|
||||
AZStd::string_view groupName = context.GetPath().Get().substr(startGroupName + 1, startPropertyName - startGroupName - 1);
|
||||
AZStd::string_view propertyName = context.GetPath().Get().substr(startPropertyName + 1);
|
||||
|
||||
JSR::ResultCode result(JSR::Tasks::ReadField);
|
||||
|
||||
auto propertyDefinition = materialType->FindProperty(groupName, propertyName, loadContext->m_materialTypeVersion);
|
||||
if (!propertyDefinition)
|
||||
if (inputValue.IsBool())
|
||||
{
|
||||
AZStd::string message = AZStd::string::format("Property '%.*s.%.*s' not found in material type.", AZ_STRING_ARG(groupName), AZ_STRING_ARG(propertyName));
|
||||
return context.Report(JsonSerializationResult::Tasks::ReadField, JsonSerializationResult::Outcomes::Unsupported, message);
|
||||
result.Combine(LoadVariant<bool>(property->m_value, false, inputValue, context));
|
||||
}
|
||||
else if (inputValue.IsInt() || inputValue.IsInt64())
|
||||
{
|
||||
result.Combine(LoadVariant<int32_t>(property->m_value, 0, inputValue, context));
|
||||
}
|
||||
else if (inputValue.IsUint() || inputValue.IsUint64())
|
||||
{
|
||||
result.Combine(LoadVariant<uint32_t>(property->m_value, 0u, inputValue, context));
|
||||
}
|
||||
else if (inputValue.IsFloat() || inputValue.IsDouble())
|
||||
{
|
||||
result.Combine(LoadVariant<float>(property->m_value, 0.0f, inputValue, context));
|
||||
}
|
||||
else if (inputValue.IsArray() && inputValue.Size() == 4)
|
||||
{
|
||||
result.Combine(LoadVariant<Vector4>(property->m_value, Vector4{0.0f, 0.0f, 0.0f, 0.0f}, inputValue, context));
|
||||
}
|
||||
else if (inputValue.IsArray() && inputValue.Size() == 3)
|
||||
{
|
||||
result.Combine(LoadVariant<Vector3>(property->m_value, Vector3{0.0f, 0.0f, 0.0f}, inputValue, context));
|
||||
}
|
||||
else if (inputValue.IsArray() && inputValue.Size() == 2)
|
||||
{
|
||||
result.Combine(LoadVariant<Vector2>(property->m_value, Vector2{0.0f, 0.0f}, inputValue, context));
|
||||
}
|
||||
else if (inputValue.IsObject())
|
||||
{
|
||||
JsonSerializationResult::ResultCode resultCode = LoadVariant<Color>(property->m_value, Color::CreateZero(), inputValue, context);
|
||||
|
||||
if(resultCode.GetProcessing() != JsonSerializationResult::Processing::Completed)
|
||||
{
|
||||
resultCode = LoadVariant<Vector4>(property->m_value, Vector4::CreateZero(), inputValue, context);
|
||||
}
|
||||
|
||||
if(resultCode.GetProcessing() != JsonSerializationResult::Processing::Completed)
|
||||
{
|
||||
resultCode = LoadVariant<Vector3>(property->m_value, Vector3::CreateZero(), inputValue, context);
|
||||
}
|
||||
|
||||
if(resultCode.GetProcessing() != JsonSerializationResult::Processing::Completed)
|
||||
{
|
||||
resultCode = LoadVariant<Vector2>(property->m_value, Vector2::CreateZero(), inputValue, context);
|
||||
}
|
||||
|
||||
if(resultCode.GetProcessing() == JsonSerializationResult::Processing::Completed)
|
||||
{
|
||||
result.Combine(resultCode);
|
||||
}
|
||||
else
|
||||
{
|
||||
return context.Report(JsonSerializationResult::Tasks::ReadField, JsonSerializationResult::Outcomes::Unsupported, "Unknown data type");
|
||||
}
|
||||
}
|
||||
else if (inputValue.IsString())
|
||||
{
|
||||
result.Combine(LoadVariant<AZStd::string>(property->m_value, AZStd::string{}, inputValue, context));
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (propertyDefinition->m_dataType)
|
||||
{
|
||||
case MaterialPropertyDataType::Bool:
|
||||
result.Combine(LoadVariant<bool>(property->m_value, false, inputValue, context));
|
||||
break;
|
||||
case MaterialPropertyDataType::Int:
|
||||
result.Combine(LoadVariant<int32_t>(property->m_value, 0, inputValue, context));
|
||||
break;
|
||||
case MaterialPropertyDataType::UInt:
|
||||
result.Combine(LoadVariant<uint32_t>(property->m_value, 0u, inputValue, context));
|
||||
break;
|
||||
case MaterialPropertyDataType::Float:
|
||||
result.Combine(LoadVariant<float>(property->m_value, 0.0f, inputValue, context));
|
||||
break;
|
||||
case MaterialPropertyDataType::Vector2:
|
||||
result.Combine(LoadVariant<Vector2>(property->m_value, Vector2{0.0f, 0.0f}, inputValue, context));
|
||||
break;
|
||||
case MaterialPropertyDataType::Vector3:
|
||||
result.Combine(LoadVariant<Vector3>(property->m_value, Vector3{0.0f, 0.0f, 0.0f}, inputValue, context));
|
||||
break;
|
||||
case MaterialPropertyDataType::Vector4:
|
||||
result.Combine(LoadVariant<Vector4>(property->m_value, Vector4{0.0f, 0.0f, 0.0f, 0.0f}, inputValue, context));
|
||||
break;
|
||||
case MaterialPropertyDataType::Color:
|
||||
result.Combine(LoadVariant<Color>(property->m_value, AZ::Colors::White, inputValue, context));
|
||||
break;
|
||||
case MaterialPropertyDataType::Image:
|
||||
case MaterialPropertyDataType::Enum:
|
||||
result.Combine(LoadVariant<AZStd::string>(property->m_value, AZStd::string{}, inputValue, context));
|
||||
break;
|
||||
default:
|
||||
return context.Report(JsonSerializationResult::Tasks::ReadField, JsonSerializationResult::Outcomes::Unsupported, "Unknown data type");
|
||||
}
|
||||
return context.Report(JsonSerializationResult::Tasks::ReadField, JsonSerializationResult::Outcomes::Unsupported, "Unknown data type");
|
||||
}
|
||||
|
||||
if (result.GetProcessing() == JsonSerializationResult::Processing::Completed)
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
|
||||
#include <Atom/RPI.Edit/Material/MaterialSourceData.h>
|
||||
#include <Atom/RPI.Edit/Material/MaterialPropertyValueSerializer.h>
|
||||
#include <Atom/RPI.Edit/Material/MaterialSourceDataSerializer.h>
|
||||
#include <Atom/RPI.Edit/Material/MaterialTypeSourceData.h>
|
||||
#include <Atom/RPI.Edit/Material/MaterialPropertyId.h>
|
||||
#include <Atom/RPI.Edit/Material/MaterialUtils.h>
|
||||
@@ -45,13 +44,17 @@ namespace AZ
|
||||
{
|
||||
if (JsonRegistrationContext* jsonContext = azrtti_cast<JsonRegistrationContext*>(context))
|
||||
{
|
||||
jsonContext->Serializer<JsonMaterialSourceDataSerializer>()->HandlesType<MaterialSourceData>();
|
||||
jsonContext->Serializer<JsonMaterialPropertyValueSerializer>()->HandlesType<MaterialSourceData::Property>();
|
||||
}
|
||||
else if (auto* serializeContext = azrtti_cast<SerializeContext*>(context))
|
||||
{
|
||||
serializeContext->Class<MaterialSourceData>()
|
||||
->Version(1)
|
||||
->Version(2)
|
||||
->Field("description", &MaterialSourceData::m_description)
|
||||
->Field("materialType", &MaterialSourceData::m_materialType)
|
||||
->Field("materialTypeVersion", &MaterialSourceData::m_materialTypeVersion)
|
||||
->Field("parentMaterial", &MaterialSourceData::m_parentMaterial)
|
||||
->Field("properties", &MaterialSourceData::m_properties)
|
||||
;
|
||||
|
||||
serializeContext->RegisterGenericType<PropertyMap>();
|
||||
@@ -80,6 +83,12 @@ namespace AZ
|
||||
MaterialAssetCreator materialAssetCreator;
|
||||
materialAssetCreator.SetElevateWarnings(elevateWarnings);
|
||||
|
||||
if (m_materialType.empty())
|
||||
{
|
||||
AZ_Error("MaterialSourceData", false, "materialType was not specified");
|
||||
return Failure();
|
||||
}
|
||||
|
||||
Outcome<Data::AssetId> materialTypeAssetId = AssetUtils::MakeAssetId(materialSourceFilePath, m_materialType, 0);
|
||||
if (!materialTypeAssetId)
|
||||
{
|
||||
@@ -194,6 +203,12 @@ namespace AZ
|
||||
bool elevateWarnings,
|
||||
AZStd::unordered_set<AZStd::string>* sourceDependencies) const
|
||||
{
|
||||
if (m_materialType.empty())
|
||||
{
|
||||
AZ_Error("MaterialSourceData", false, "materialType was not specified");
|
||||
return Failure();
|
||||
}
|
||||
|
||||
const auto materialTypeSourcePath = AssetUtils::ResolvePathReference(materialSourceFilePath, m_materialType);
|
||||
const auto materialTypeAssetId = AssetUtils::MakeAssetId(materialTypeSourcePath, 0);
|
||||
if (!materialTypeAssetId.IsSuccess())
|
||||
|
||||
@@ -1,162 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#include <Atom/RPI.Edit/Material/MaterialSourceDataSerializer.h>
|
||||
#include <Atom/RPI.Edit/Material/MaterialTypeSourceData.h>
|
||||
#include <Atom/RPI.Edit/Material/MaterialPropertyValueSerializer.h>
|
||||
#include <Atom/RPI.Edit/Common/AssetUtils.h>
|
||||
#include <Atom/RPI.Edit/Common/JsonFileLoadContext.h>
|
||||
#include <Atom/RPI.Edit/Common/JsonUtils.h>
|
||||
#include <AzCore/Serialization/Json/JsonUtils.h>
|
||||
|
||||
#include <AzCore/Serialization/Json/BaseJsonSerializer.h>
|
||||
#include <AzCore/Serialization/Json/JsonSerializationResult.h>
|
||||
#include <AzCore/Serialization/Json/JsonSerialization.h>
|
||||
#include <AzCore/Serialization/Json/StackedString.h>
|
||||
|
||||
namespace AZ
|
||||
{
|
||||
namespace RPI
|
||||
{
|
||||
AZ_CLASS_ALLOCATOR_IMPL(JsonMaterialSourceDataSerializer, SystemAllocator, 0);
|
||||
|
||||
JsonSerializationResult::Result JsonMaterialSourceDataSerializer::Load(void* outputValue, const Uuid& outputValueTypeId,
|
||||
const rapidjson::Value& inputValue, JsonDeserializerContext& context)
|
||||
{
|
||||
namespace JSR = JsonSerializationResult;
|
||||
|
||||
AZ_Assert(azrtti_typeid<MaterialSourceData>() == outputValueTypeId,
|
||||
"Unable to deserialize material to json because the provided type is %s",
|
||||
outputValueTypeId.ToString<AZStd::string>().c_str());
|
||||
AZ_UNUSED(outputValueTypeId);
|
||||
|
||||
MaterialSourceData* materialSourceData = reinterpret_cast<MaterialSourceData*>(outputValue);
|
||||
AZ_Assert(materialSourceData, "Output value for JsonMaterialSourceDataSerializer can't be null.");
|
||||
|
||||
JSR::ResultCode result(JSR::Tasks::ReadField);
|
||||
|
||||
if (!inputValue.IsObject())
|
||||
{
|
||||
return context.Report(JSR::Tasks::ReadField, JSR::Outcomes::Unsupported, "Material data must be a JSON object");
|
||||
}
|
||||
|
||||
result.Combine(ContinueLoadingFromJsonObjectField(&materialSourceData->m_description, azrtti_typeid<AZStd::string>(), inputValue, "description", context));
|
||||
result.Combine(ContinueLoadingFromJsonObjectField(&materialSourceData->m_parentMaterial, azrtti_typeid<AZStd::string>(), inputValue, "parentMaterial", context));
|
||||
result.Combine(ContinueLoadingFromJsonObjectField(&materialSourceData->m_materialType, azrtti_typeid<AZStd::string>(), inputValue, "materialType", context));
|
||||
result.Combine(ContinueLoadingFromJsonObjectField(&materialSourceData->m_materialTypeVersion, azrtti_typeid<uint32_t>(), inputValue, "materialTypeVersion", context));
|
||||
|
||||
if (materialSourceData->m_materialType.empty())
|
||||
{
|
||||
return context.Report(JSR::Tasks::ReadField, JSR::Outcomes::Catastrophic, "Required field 'materialType' is missing or invalid");
|
||||
}
|
||||
|
||||
JsonFileLoadContext* jsonFileLoadContext = context.GetMetadata().Find<JsonFileLoadContext>();
|
||||
|
||||
if (!jsonFileLoadContext)
|
||||
{
|
||||
// Go ahead and create a JsonFileLoadContext because we'll need to use it below when loading the material type
|
||||
context.GetMetadata().Add(JsonFileLoadContext{});
|
||||
jsonFileLoadContext = context.GetMetadata().Find<JsonFileLoadContext>();
|
||||
}
|
||||
|
||||
// Load the material type file because we need the property type information in order to know how to read the property values
|
||||
MaterialTypeSourceData materialTypeData;
|
||||
{
|
||||
AZStd::string materialTypePath = AssetUtils::ResolvePathReference(jsonFileLoadContext->GetFilePath(), materialSourceData->m_materialType);
|
||||
|
||||
auto materialTypeJson = JsonSerializationUtils::ReadJsonFile(materialTypePath, AZ::RPI::JsonUtils::DefaultMaxFileSize);
|
||||
if (!materialTypeJson.IsSuccess())
|
||||
{
|
||||
AZStd::string failureMessage;
|
||||
failureMessage = AZStd::string::format("Failed to load material-type file '%s': %s", materialTypePath.c_str(), materialTypeJson.GetError().c_str());
|
||||
ScopedContextPath subPath{context, "materialType"};
|
||||
return context.Report(JSR::Tasks::ReadField, JSR::Outcomes::Catastrophic, failureMessage);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Since we're about to load a different file the JsonFileLoadContext needs to be changed to reflect the file that's being loaded.
|
||||
jsonFileLoadContext->PushFilePath(materialTypePath);
|
||||
|
||||
// We also need a special reporting function for the material type, to note the fact that the issue is in the material type not this file.
|
||||
auto reportingPrev = context.GetReporter();
|
||||
context.PushReporter([materialTypePath, reportingPrev](AZStd::string_view message, JSR::ResultCode result, AZStd::string_view path) -> JSR::ResultCode
|
||||
{
|
||||
AZStd::string materialTypeFilename;
|
||||
if (!AzFramework::StringFunc::Path::GetFullFileName(materialTypePath.c_str(), materialTypeFilename))
|
||||
{
|
||||
materialTypeFilename = materialTypePath;
|
||||
}
|
||||
|
||||
AZStd::string newPath = AZStd::string::format("[%.*s]%.*s", AZ_STRING_ARG(materialTypeFilename), AZ_STRING_ARG(path));
|
||||
return reportingPrev(message, result, newPath);
|
||||
});
|
||||
|
||||
JsonDeserializerSettings settings;
|
||||
settings.m_metadata = context.GetMetadata();
|
||||
settings.m_reporting = context.GetReporter();
|
||||
settings.m_registrationContext = context.GetRegistrationContext();
|
||||
settings.m_serializeContext = context.GetSerializeContext();
|
||||
settings.m_clearContainers = context.ShouldClearContainers();
|
||||
|
||||
JsonSerializationResult::ResultCode materialTypeLoadResult = JsonSerialization::Load(materialTypeData, materialTypeJson.GetValue(), settings);
|
||||
materialTypeData.ResolveUvEnums();
|
||||
|
||||
// Restore prior configuration
|
||||
context.PopReporter();
|
||||
jsonFileLoadContext->PopFilePath();
|
||||
|
||||
// Even though results from the material type file is a separate JSON serialization, we combine the results to make sure
|
||||
// any issues are bubbled up. I'm not sure if this is the most desirable approach, but better to over-report issues than
|
||||
// under-report them.
|
||||
result.Combine(materialTypeLoadResult);
|
||||
}
|
||||
}
|
||||
|
||||
context.GetMetadata().Add(AZStd::move(materialTypeData));
|
||||
|
||||
JsonMaterialPropertyValueSerializer::LoadContext materialPropertyValueLoadContext;
|
||||
materialPropertyValueLoadContext.m_materialTypeVersion = materialSourceData->m_materialTypeVersion;
|
||||
context.GetMetadata().Add(materialPropertyValueLoadContext);
|
||||
|
||||
result.Combine(ContinueLoadingFromJsonObjectField(&materialSourceData->m_properties, azrtti_typeid<MaterialSourceData::PropertyGroupMap>(), inputValue, "properties", context));
|
||||
|
||||
if (result.GetProcessing() == JsonSerializationResult::Processing::Completed)
|
||||
{
|
||||
return context.Report(result, "Successfully loaded material.");
|
||||
}
|
||||
else
|
||||
{
|
||||
return context.Report(result, "Partially loaded material.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
JsonSerializationResult::Result JsonMaterialSourceDataSerializer::Store(rapidjson::Value& outputValue, const void* inputValue,
|
||||
[[maybe_unused]] const void* defaultValue, const Uuid& valueTypeId, JsonSerializerContext& context)
|
||||
{
|
||||
namespace JSR = JsonSerializationResult;
|
||||
|
||||
AZ_Assert(azrtti_typeid<MaterialSourceData>() == valueTypeId,
|
||||
"Unable to serialize material to json because the provided type is %s",
|
||||
valueTypeId.ToString<AZStd::string>().c_str());
|
||||
AZ_UNUSED(valueTypeId);
|
||||
|
||||
const MaterialSourceData* materialSourceData = reinterpret_cast<const MaterialSourceData*>(inputValue);
|
||||
AZ_Assert(materialSourceData, "Input value for JsonMaterialSourceDataSerializer can't be null.");
|
||||
|
||||
JSR::ResultCode resultCode(JSR::Tasks::ReadField);
|
||||
resultCode.Combine(ContinueStoringToJsonObjectField(outputValue, "description", &materialSourceData->m_description, nullptr, azrtti_typeid<AZStd::string>(), context));
|
||||
resultCode.Combine(ContinueStoringToJsonObjectField(outputValue, "parentMaterial", &materialSourceData->m_parentMaterial, nullptr, azrtti_typeid<AZStd::string>(), context));
|
||||
resultCode.Combine(ContinueStoringToJsonObjectField(outputValue, "materialType", &materialSourceData->m_materialType, nullptr, azrtti_typeid<AZStd::string>(), context));
|
||||
resultCode.Combine(ContinueStoringToJsonObjectField(outputValue, "materialTypeVersion", &materialSourceData->m_materialTypeVersion, nullptr, azrtti_typeid<uint32_t>(), context));
|
||||
resultCode.Combine(ContinueStoringToJsonObjectField(outputValue, "properties", &materialSourceData->m_properties, nullptr, azrtti_typeid<MaterialSourceData::PropertyGroupMap>(), context));
|
||||
|
||||
return context.Report(resultCode, "Processed material.");
|
||||
}
|
||||
} // namespace RPI
|
||||
} // namespace AZ
|
||||
@@ -130,17 +130,12 @@ namespace AZ
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bool MaterialTypeSourceData::ApplyPropertyRenames(MaterialPropertyId& propertyId, uint32_t materialTypeVersion) const
|
||||
bool MaterialTypeSourceData::ApplyPropertyRenames(MaterialPropertyId& propertyId) const
|
||||
{
|
||||
bool renamed = false;
|
||||
|
||||
for (const VersionUpdateDefinition& versionUpdate : m_versionUpdates)
|
||||
{
|
||||
if (materialTypeVersion >= versionUpdate.m_toVersion)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
for (const VersionUpdatesRenameOperationDefinition& action : versionUpdate.m_actions)
|
||||
{
|
||||
if (action.m_operation == "rename")
|
||||
@@ -161,7 +156,7 @@ namespace AZ
|
||||
return renamed;
|
||||
}
|
||||
|
||||
const MaterialTypeSourceData::PropertyDefinition* MaterialTypeSourceData::FindProperty(AZStd::string_view groupName, AZStd::string_view propertyName, uint32_t materialTypeVersion) const
|
||||
const MaterialTypeSourceData::PropertyDefinition* MaterialTypeSourceData::FindProperty(AZStd::string_view groupName, AZStd::string_view propertyName) const
|
||||
{
|
||||
auto groupIter = m_propertyLayout.m_properties.find(groupName);
|
||||
if (groupIter != m_propertyLayout.m_properties.end())
|
||||
@@ -178,7 +173,7 @@ namespace AZ
|
||||
// Property has not been found, try looking for renames in the version history
|
||||
|
||||
MaterialPropertyId propertyId = MaterialPropertyId{groupName, propertyName};
|
||||
ApplyPropertyRenames(propertyId, materialTypeVersion);
|
||||
ApplyPropertyRenames(propertyId);
|
||||
|
||||
// Do the search again with the new names
|
||||
|
||||
|
||||
@@ -109,6 +109,81 @@ namespace AZ
|
||||
return m_wasPreFinalized;
|
||||
}
|
||||
|
||||
//! Attempts to convert a numeric MaterialPropertyValue to another numeric type @T,
|
||||
//! since MaterialPropertyValue itself does not support any kind of casting.
|
||||
//! If the original MaterialPropertyValue is not a numeric type, the original value is returned.
|
||||
template<typename T>
|
||||
MaterialPropertyValue CastNumericMaterialPropertyValue(const MaterialPropertyValue& value)
|
||||
{
|
||||
TypeId typeId = value.GetTypeId();
|
||||
|
||||
if (typeId == azrtti_typeid<bool>())
|
||||
{
|
||||
return aznumeric_cast<T>(value.GetValue<bool>());
|
||||
}
|
||||
else if (typeId == azrtti_typeid<int32_t>())
|
||||
{
|
||||
return aznumeric_cast<T>(value.GetValue<int32_t>());
|
||||
}
|
||||
else if (typeId == azrtti_typeid<uint32_t>())
|
||||
{
|
||||
return aznumeric_cast<T>(value.GetValue<uint32_t>());
|
||||
}
|
||||
else if (typeId == azrtti_typeid<float>())
|
||||
{
|
||||
return aznumeric_cast<T>(value.GetValue<float>());
|
||||
}
|
||||
else
|
||||
{
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
//! Attempts to convert an AZ::Vector[2-4] MaterialPropertyValue to another AZ::Vector[2-4] type @T.
|
||||
//! Any extra elements will be dropped or set to 0.0 as needed.
|
||||
//! If the original MaterialPropertyValue is not a Vector type, the original value is returned.
|
||||
template<typename VectorT>
|
||||
MaterialPropertyValue CastVectorMaterialPropertyValue(const MaterialPropertyValue& value)
|
||||
{
|
||||
float values[4] = {};
|
||||
|
||||
TypeId typeId = value.GetTypeId();
|
||||
if (typeId == azrtti_typeid<Vector2>())
|
||||
{
|
||||
value.GetValue<Vector2>().StoreToFloat2(values);
|
||||
}
|
||||
else if (typeId == azrtti_typeid<Vector3>())
|
||||
{
|
||||
value.GetValue<Vector3>().StoreToFloat3(values);
|
||||
}
|
||||
else if (typeId == azrtti_typeid<Vector4>())
|
||||
{
|
||||
value.GetValue<Vector4>().StoreToFloat4(values);
|
||||
}
|
||||
else
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
typeId = azrtti_typeid<VectorT>();
|
||||
if (typeId == azrtti_typeid<Vector2>())
|
||||
{
|
||||
return Vector2::CreateFromFloat2(values);
|
||||
}
|
||||
else if (typeId == azrtti_typeid<Vector3>())
|
||||
{
|
||||
return Vector3::CreateFromFloat3(values);
|
||||
}
|
||||
else if (typeId == azrtti_typeid<Vector4>())
|
||||
{
|
||||
return Vector4::CreateFromFloat4(values);
|
||||
}
|
||||
else
|
||||
{
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
void MaterialAsset::Finalize(AZStd::function<void(const char*)> reportWarning, AZStd::function<void(const char*)> reportError)
|
||||
{
|
||||
if (m_wasPreFinalized)
|
||||
@@ -180,9 +255,66 @@ namespace AZ
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ValidateMaterialPropertyDataType(value.GetTypeId(), name, propertyDescriptor, reportError))
|
||||
// The material asset could be finalized sometime after the original JSON is loaded, and the material type might not have been available
|
||||
// at that time, so the data type would not be known for each property. So each raw property's type was based on what appeared in the JSON
|
||||
// and here we have the first opportunity to resolve that value with the actual type. For example, a float property could have been specified in
|
||||
// the JSON as 7 instead of 7.0, which is valid. Similarly, a Color and a Vector3 can both be specified as "[0.0,0.0,0.0]" in the JSON file.
|
||||
|
||||
MaterialPropertyValue finalValue = value;
|
||||
|
||||
switch (propertyDescriptor->GetDataType())
|
||||
{
|
||||
finalizedPropertyValues[propertyIndex.GetIndex()] = value;
|
||||
case MaterialPropertyDataType::Bool:
|
||||
finalValue = CastNumericMaterialPropertyValue<bool>(value);
|
||||
break;
|
||||
case MaterialPropertyDataType::Int:
|
||||
finalValue = CastNumericMaterialPropertyValue<int32_t>(value);
|
||||
break;
|
||||
case MaterialPropertyDataType::UInt:
|
||||
finalValue = CastNumericMaterialPropertyValue<uint32_t>(value);
|
||||
break;
|
||||
case MaterialPropertyDataType::Float:
|
||||
finalValue = CastNumericMaterialPropertyValue<float>(value);
|
||||
break;
|
||||
case MaterialPropertyDataType::Color:
|
||||
if (value.GetTypeId() == azrtti_typeid<Vector3>())
|
||||
{
|
||||
finalValue = Color::CreateFromVector3(value.GetValue<Vector3>());
|
||||
}
|
||||
else if (value.GetTypeId() == azrtti_typeid<Vector4>())
|
||||
{
|
||||
Vector4 vector4 = value.GetValue<Vector4>();
|
||||
finalValue = Color::CreateFromVector3AndFloat(vector4.GetAsVector3(), vector4.GetW());
|
||||
}
|
||||
break;
|
||||
case MaterialPropertyDataType::Vector2:
|
||||
finalValue = CastVectorMaterialPropertyValue<Vector2>(value);
|
||||
break;
|
||||
case MaterialPropertyDataType::Vector3:
|
||||
if (value.GetTypeId() == azrtti_typeid<Color>())
|
||||
{
|
||||
finalValue = value.GetValue<Color>().GetAsVector3();
|
||||
}
|
||||
else
|
||||
{
|
||||
finalValue = CastVectorMaterialPropertyValue<Vector3>(value);
|
||||
}
|
||||
break;
|
||||
case MaterialPropertyDataType::Vector4:
|
||||
if (value.GetTypeId() == azrtti_typeid<Color>())
|
||||
{
|
||||
finalValue = value.GetValue<Color>().GetAsVector4();
|
||||
}
|
||||
else
|
||||
{
|
||||
finalValue = CastVectorMaterialPropertyValue<Vector4>(value);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (ValidateMaterialPropertyDataType(finalValue.GetTypeId(), name, propertyDescriptor, reportError))
|
||||
{
|
||||
finalizedPropertyValues[propertyIndex.GetIndex()] = finalValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -449,37 +449,7 @@ namespace UnitTest
|
||||
expectCreatorError("Type mismatch",
|
||||
[](MaterialAssetCreator& creator)
|
||||
{
|
||||
creator.SetPropertyValue(Name{ "MyInt" }, 0.0f);
|
||||
});
|
||||
|
||||
expectCreatorError("Type mismatch",
|
||||
[](MaterialAssetCreator& creator)
|
||||
{
|
||||
creator.SetPropertyValue(Name{ "MyUInt" }, -1);
|
||||
});
|
||||
|
||||
expectCreatorError("Type mismatch",
|
||||
[](MaterialAssetCreator& creator)
|
||||
{
|
||||
creator.SetPropertyValue(Name{ "MyFloat" }, 10u);
|
||||
});
|
||||
|
||||
expectCreatorError("Type mismatch",
|
||||
[](MaterialAssetCreator& creator)
|
||||
{
|
||||
creator.SetPropertyValue(Name{ "MyFloat2" }, 1.0f);
|
||||
});
|
||||
|
||||
expectCreatorError("Type mismatch",
|
||||
[](MaterialAssetCreator& creator)
|
||||
{
|
||||
creator.SetPropertyValue(Name{ "MyFloat3" }, AZ::Vector4{});
|
||||
});
|
||||
|
||||
expectCreatorError("Type mismatch",
|
||||
[](MaterialAssetCreator& creator)
|
||||
{
|
||||
creator.SetPropertyValue(Name{ "MyFloat4" }, AZ::Vector3{});
|
||||
creator.SetPropertyValue(Name{ "MyFloat" }, AZ::Vector4{});
|
||||
});
|
||||
|
||||
expectCreatorError("Type mismatch",
|
||||
|
||||
@@ -297,6 +297,63 @@ namespace UnitTest
|
||||
checkRawPropertyValues();
|
||||
}
|
||||
|
||||
// Can return a Vector4 or a Color as a Vector4
|
||||
Vector4 GetAsVector4(const MaterialPropertyValue& value)
|
||||
{
|
||||
if (value.GetTypeId() == azrtti_typeid<Vector4>())
|
||||
{
|
||||
return value.GetValue<Vector4>();
|
||||
}
|
||||
else if (value.GetTypeId() == azrtti_typeid<Color>())
|
||||
{
|
||||
return value.GetValue<Color>().GetAsVector4();
|
||||
}
|
||||
else
|
||||
{
|
||||
return Vector4::CreateZero();
|
||||
}
|
||||
}
|
||||
|
||||
// Can return a Int or a UInt as a Int
|
||||
int32_t GetAsInt(const MaterialPropertyValue& value)
|
||||
{
|
||||
if (value.GetTypeId() == azrtti_typeid<int32_t>())
|
||||
{
|
||||
return value.GetValue<int32_t>();
|
||||
}
|
||||
else if (value.GetTypeId() == azrtti_typeid<uint32_t>())
|
||||
{
|
||||
return aznumeric_cast<int32_t>(value.GetValue<uint32_t>());
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
template<typename TargetTypeT>
|
||||
bool AreTypesCompatible(const MaterialPropertyValue& a, const MaterialPropertyValue& b)
|
||||
{
|
||||
auto fixupType = [](TypeId t)
|
||||
{
|
||||
if (t == azrtti_typeid<uint32_t>())
|
||||
{
|
||||
return azrtti_typeid<int32_t>();
|
||||
}
|
||||
|
||||
if (t == azrtti_typeid<Color>())
|
||||
{
|
||||
return azrtti_typeid<Vector4>();
|
||||
}
|
||||
|
||||
return t;
|
||||
};
|
||||
|
||||
TypeId targetTypeId = azrtti_typeid<TargetTypeT>();
|
||||
|
||||
return fixupType(a.GetTypeId()) == fixupType(targetTypeId) && fixupType(b.GetTypeId()) == fixupType(targetTypeId);
|
||||
}
|
||||
|
||||
void CheckEqual(MaterialSourceData& a, MaterialSourceData& b)
|
||||
{
|
||||
EXPECT_STREQ(a.m_materialType.data(), b.m_materialType.data());
|
||||
@@ -334,27 +391,41 @@ namespace UnitTest
|
||||
auto& propertyA = propertyIterA.second;
|
||||
auto& propertyB = propertyIterB->second;
|
||||
|
||||
bool typesMatch = propertyA.m_value.GetTypeId() == propertyB.m_value.GetTypeId();
|
||||
EXPECT_TRUE(typesMatch);
|
||||
if (typesMatch)
|
||||
AZStd::string propertyReference = AZStd::string::format(" for property '%s.%s'", groupName.c_str(), propertyName.c_str());
|
||||
|
||||
// We allow some types like Vector4 and Color or Int and UInt to be interchangeable since they serialize the same and can be converted when the MaterialAsset is finalized.
|
||||
|
||||
if (AreTypesCompatible<bool>(propertyA.m_value, propertyB.m_value))
|
||||
{
|
||||
AZStd::string propertyReference = AZStd::string::format(" for property '%s.%s'", groupName.c_str(), propertyName.c_str());
|
||||
|
||||
auto typeId = propertyA.m_value.GetTypeId();
|
||||
|
||||
if (typeId == azrtti_typeid<bool>()) { EXPECT_EQ(propertyA.m_value.GetValue<bool>(), propertyB.m_value.GetValue<bool>()) << propertyReference.c_str(); }
|
||||
else if (typeId == azrtti_typeid<int32_t>()) { EXPECT_EQ(propertyA.m_value.GetValue<int32_t>(), propertyB.m_value.GetValue<int32_t>()) << propertyReference.c_str(); }
|
||||
else if (typeId == azrtti_typeid<uint32_t>()) { EXPECT_EQ(propertyA.m_value.GetValue<uint32_t>(), propertyB.m_value.GetValue<uint32_t>()) << propertyReference.c_str(); }
|
||||
else if (typeId == azrtti_typeid<float>()) { EXPECT_NEAR(propertyA.m_value.GetValue<float>(), propertyB.m_value.GetValue<float>(), 0.01) << propertyReference.c_str(); }
|
||||
else if (typeId == azrtti_typeid<Vector2>()) { EXPECT_TRUE(propertyA.m_value.GetValue<Vector2>().IsClose(propertyB.m_value.GetValue<Vector2>())) << propertyReference.c_str(); }
|
||||
else if (typeId == azrtti_typeid<Vector3>()) { EXPECT_TRUE(propertyA.m_value.GetValue<Vector3>().IsClose(propertyB.m_value.GetValue<Vector3>())) << propertyReference.c_str(); }
|
||||
else if (typeId == azrtti_typeid<Vector4>()) { EXPECT_TRUE(propertyA.m_value.GetValue<Vector4>().IsClose(propertyB.m_value.GetValue<Vector4>())) << propertyReference.c_str(); }
|
||||
else if (typeId == azrtti_typeid<Color>()) { EXPECT_TRUE(propertyA.m_value.GetValue<Color>().IsClose(propertyB.m_value.GetValue<Color>())) << propertyReference.c_str(); }
|
||||
else if (typeId == azrtti_typeid<AZStd::string>()) { EXPECT_STREQ(propertyA.m_value.GetValue<AZStd::string>().c_str(), propertyB.m_value.GetValue<AZStd::string>().c_str()) << propertyReference.c_str(); }
|
||||
else
|
||||
{
|
||||
ADD_FAILURE();
|
||||
}
|
||||
EXPECT_EQ(propertyA.m_value.GetValue<bool>(), propertyB.m_value.GetValue<bool>()) << propertyReference.c_str();
|
||||
}
|
||||
else if (AreTypesCompatible<int32_t>(propertyA.m_value, propertyB.m_value))
|
||||
{
|
||||
EXPECT_EQ(GetAsInt(propertyA.m_value), GetAsInt(propertyB.m_value)) << propertyReference.c_str();
|
||||
}
|
||||
else if (AreTypesCompatible<float>(propertyA.m_value, propertyB.m_value))
|
||||
{
|
||||
EXPECT_NEAR(propertyA.m_value.GetValue<float>(), propertyB.m_value.GetValue<float>(), 0.01) << propertyReference.c_str();
|
||||
}
|
||||
else if (AreTypesCompatible<Vector2>(propertyA.m_value, propertyB.m_value))
|
||||
{
|
||||
EXPECT_TRUE(propertyA.m_value.GetValue<Vector2>().IsClose(propertyB.m_value.GetValue<Vector2>())) << propertyReference.c_str();
|
||||
}
|
||||
else if (AreTypesCompatible<Vector3>(propertyA.m_value, propertyB.m_value))
|
||||
{
|
||||
EXPECT_TRUE(propertyA.m_value.GetValue<Vector3>().IsClose(propertyB.m_value.GetValue<Vector3>())) << propertyReference.c_str();
|
||||
}
|
||||
else if (AreTypesCompatible<Vector4>(propertyA.m_value, propertyB.m_value))
|
||||
{
|
||||
EXPECT_TRUE(GetAsVector4(propertyA.m_value).IsClose(GetAsVector4(propertyB.m_value))) << propertyReference.c_str();
|
||||
}
|
||||
else if (AreTypesCompatible<AZStd::string>(propertyA.m_value, propertyB.m_value))
|
||||
{
|
||||
EXPECT_STREQ(propertyA.m_value.GetValue<AZStd::string>().c_str(), propertyB.m_value.GetValue<AZStd::string>().c_str()) << propertyReference.c_str();
|
||||
}
|
||||
else
|
||||
{
|
||||
ADD_FAILURE();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -363,42 +434,8 @@ namespace UnitTest
|
||||
|
||||
TEST_F(MaterialSourceDataTests, TestJsonRoundTrip)
|
||||
{
|
||||
const char* materialTypeJson =
|
||||
"{ \n"
|
||||
" \"propertyLayout\": { \n"
|
||||
" \"version\": 1, \n"
|
||||
" \"groups\": [ \n"
|
||||
" { \"name\": \"groupA\" }, \n"
|
||||
" { \"name\": \"groupB\" }, \n"
|
||||
" { \"name\": \"groupC\" } \n"
|
||||
" ], \n"
|
||||
" \"properties\": { \n"
|
||||
" \"groupA\": [ \n"
|
||||
" {\"name\": \"MyBool\", \"type\": \"bool\"}, \n"
|
||||
" {\"name\": \"MyInt\", \"type\": \"int\"}, \n"
|
||||
" {\"name\": \"MyUInt\", \"type\": \"uint\"} \n"
|
||||
" ], \n"
|
||||
" \"groupB\": [ \n"
|
||||
" {\"name\": \"MyFloat\", \"type\": \"float\"}, \n"
|
||||
" {\"name\": \"MyFloat2\", \"type\": \"vector2\"}, \n"
|
||||
" {\"name\": \"MyFloat3\", \"type\": \"vector3\"} \n"
|
||||
" ], \n"
|
||||
" \"groupC\": [ \n"
|
||||
" {\"name\": \"MyFloat4\", \"type\": \"vector4\"}, \n"
|
||||
" {\"name\": \"MyColor\", \"type\": \"color\"}, \n"
|
||||
" {\"name\": \"MyImage\", \"type\": \"image\"} \n"
|
||||
" ] \n"
|
||||
" } \n"
|
||||
" } \n"
|
||||
"} \n";
|
||||
|
||||
const char* materialTypeFilePath = "@exefolder@/Temp/roundTripTest.materialtype";
|
||||
|
||||
AZ::IO::FileIOStream file;
|
||||
EXPECT_TRUE(file.Open(materialTypeFilePath, AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeCreatePath));
|
||||
file.Write(strlen(materialTypeJson), materialTypeJson);
|
||||
file.Close();
|
||||
|
||||
MaterialSourceData sourceDataOriginal;
|
||||
sourceDataOriginal.m_materialType = materialTypeFilePath;
|
||||
sourceDataOriginal.m_parentMaterial = materialTypeFilePath;
|
||||
@@ -434,8 +471,8 @@ namespace UnitTest
|
||||
"properties": {
|
||||
"general": [
|
||||
{
|
||||
"name": "testColor",
|
||||
"type": "color"
|
||||
"name": "testValue",
|
||||
"type": "Float"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -456,7 +493,7 @@ namespace UnitTest
|
||||
{
|
||||
"properties": {
|
||||
"general": {
|
||||
"testColor": [0.1,0.2,0.3]
|
||||
"testValue": 1.2
|
||||
}
|
||||
},
|
||||
"materialType": "@exefolder@/Temp/simpleMaterialType.materialtype"
|
||||
@@ -469,27 +506,11 @@ namespace UnitTest
|
||||
EXPECT_EQ(AZ::JsonSerializationResult::Tasks::ReadField, loadResult.m_jsonResultCode.GetTask());
|
||||
EXPECT_EQ(AZ::JsonSerializationResult::Processing::Completed, loadResult.m_jsonResultCode.GetProcessing());
|
||||
|
||||
AZ::Color testColor = material.m_properties["general"]["testColor"].m_value.GetValue<AZ::Color>();
|
||||
EXPECT_TRUE(AZ::Color(0.1f, 0.2f, 0.3f, 1.0f).IsClose(testColor, 0.01));
|
||||
float testValue = material.m_properties["general"]["testValue"].m_value.GetValue<float>();
|
||||
EXPECT_FLOAT_EQ(1.2f, testValue);
|
||||
}
|
||||
|
||||
TEST_F(MaterialSourceDataTests, Load_Error_NotAnObject)
|
||||
{
|
||||
const AZStd::string inputJson = R"(
|
||||
[]
|
||||
)";
|
||||
|
||||
MaterialSourceData material;
|
||||
JsonTestResult loadResult = LoadTestDataFromJson(material, inputJson);
|
||||
|
||||
EXPECT_EQ(AZ::JsonSerializationResult::Tasks::ReadField, loadResult.m_jsonResultCode.GetTask());
|
||||
EXPECT_EQ(AZ::JsonSerializationResult::Processing::Altered, loadResult.m_jsonResultCode.GetProcessing());
|
||||
EXPECT_EQ(AZ::JsonSerializationResult::Outcomes::Unsupported, loadResult.m_jsonResultCode.GetOutcome());
|
||||
|
||||
EXPECT_TRUE(loadResult.ContainsMessage("", "Material data must be a JSON object"));
|
||||
}
|
||||
|
||||
TEST_F(MaterialSourceDataTests, Load_Error_NoMaterialType)
|
||||
|
||||
TEST_F(MaterialSourceDataTests, CreateMaterialAsset_NoMaterialType)
|
||||
{
|
||||
const AZStd::string inputJson = R"(
|
||||
{
|
||||
@@ -505,14 +526,29 @@ namespace UnitTest
|
||||
MaterialSourceData material;
|
||||
JsonTestResult loadResult = LoadTestDataFromJson(material, inputJson);
|
||||
|
||||
EXPECT_EQ(AZ::JsonSerializationResult::Tasks::ReadField, loadResult.m_jsonResultCode.GetTask());
|
||||
EXPECT_EQ(AZ::JsonSerializationResult::Processing::Halted, loadResult.m_jsonResultCode.GetProcessing());
|
||||
EXPECT_EQ(AZ::JsonSerializationResult::Outcomes::Catastrophic, loadResult.m_jsonResultCode.GetOutcome());
|
||||
const bool elevateWarnings = false;
|
||||
|
||||
EXPECT_TRUE(loadResult.ContainsMessage("", "Required field 'materialType' is missing"));
|
||||
ErrorMessageFinder errorMessageFinder;
|
||||
|
||||
errorMessageFinder.AddExpectedErrorMessage("materialType was not specified");
|
||||
auto result = material.CreateMaterialAsset(AZ::Uuid::CreateRandom(), "test.material", AZ::RPI::MaterialAssetProcessingMode::DeferredBake, elevateWarnings);
|
||||
EXPECT_FALSE(result.IsSuccess());
|
||||
errorMessageFinder.CheckExpectedErrorsFound();
|
||||
|
||||
errorMessageFinder.Reset();
|
||||
errorMessageFinder.AddExpectedErrorMessage("materialType was not specified");
|
||||
result = material.CreateMaterialAsset(AZ::Uuid::CreateRandom(), "test.material", AZ::RPI::MaterialAssetProcessingMode::PreBake, elevateWarnings);
|
||||
EXPECT_FALSE(result.IsSuccess());
|
||||
errorMessageFinder.CheckExpectedErrorsFound();
|
||||
|
||||
errorMessageFinder.Reset();
|
||||
errorMessageFinder.AddExpectedErrorMessage("materialType was not specified");
|
||||
result = material.CreateMaterialAssetFromSourceData(AZ::Uuid::CreateRandom(), "test.material", elevateWarnings);
|
||||
EXPECT_FALSE(result.IsSuccess());
|
||||
errorMessageFinder.CheckExpectedErrorsFound();
|
||||
}
|
||||
|
||||
TEST_F(MaterialSourceDataTests, Load_Error_MaterialTypeDoesNotExist)
|
||||
|
||||
TEST_F(MaterialSourceDataTests, CreateMaterialAsset_MaterialTypeDoesNotExist)
|
||||
{
|
||||
const AZStd::string inputJson = R"(
|
||||
{
|
||||
@@ -529,102 +565,43 @@ namespace UnitTest
|
||||
MaterialSourceData material;
|
||||
JsonTestResult loadResult = LoadTestDataFromJson(material, inputJson);
|
||||
|
||||
EXPECT_EQ(AZ::JsonSerializationResult::Tasks::ReadField, loadResult.m_jsonResultCode.GetTask());
|
||||
EXPECT_EQ(AZ::JsonSerializationResult::Processing::Halted, loadResult.m_jsonResultCode.GetProcessing());
|
||||
EXPECT_EQ(AZ::JsonSerializationResult::Outcomes::Catastrophic, loadResult.m_jsonResultCode.GetOutcome());
|
||||
const bool elevateWarnings = false;
|
||||
|
||||
EXPECT_TRUE(loadResult.ContainsMessage("/materialType", "Failed to load material-type file"));
|
||||
ErrorMessageFinder errorMessageFinder;
|
||||
|
||||
errorMessageFinder.AddExpectedErrorMessage("Could not find asset [DoesNotExist.materialtype]");
|
||||
auto result = material.CreateMaterialAsset(AZ::Uuid::CreateRandom(), "test.material", AZ::RPI::MaterialAssetProcessingMode::DeferredBake, elevateWarnings);
|
||||
EXPECT_FALSE(result.IsSuccess());
|
||||
errorMessageFinder.CheckExpectedErrorsFound();
|
||||
|
||||
errorMessageFinder.Reset();
|
||||
errorMessageFinder.AddExpectedErrorMessage("Could not find asset [DoesNotExist.materialtype]");
|
||||
result = material.CreateMaterialAsset(AZ::Uuid::CreateRandom(), "test.material", AZ::RPI::MaterialAssetProcessingMode::PreBake, elevateWarnings);
|
||||
EXPECT_FALSE(result.IsSuccess());
|
||||
errorMessageFinder.CheckExpectedErrorsFound();
|
||||
|
||||
errorMessageFinder.Reset();
|
||||
errorMessageFinder.AddExpectedErrorMessage("Could not find asset [DoesNotExist.materialtype]");
|
||||
errorMessageFinder.AddIgnoredErrorMessage("Failed to create material type asset ID", true);
|
||||
result = material.CreateMaterialAssetFromSourceData(AZ::Uuid::CreateRandom(), "test.material", elevateWarnings);
|
||||
EXPECT_FALSE(result.IsSuccess());
|
||||
errorMessageFinder.CheckExpectedErrorsFound();
|
||||
}
|
||||
|
||||
TEST_F(MaterialSourceDataTests, Load_MaterialTypeMessagesAreReported)
|
||||
|
||||
TEST_F(MaterialSourceDataTests, CreateMaterialAsset_MaterialPropertyNotFound)
|
||||
{
|
||||
const AZStd::string simpleMaterialTypeJson = R"(
|
||||
{
|
||||
"propertyLayout": {
|
||||
"properties": {
|
||||
"general": [
|
||||
{
|
||||
"name": "testColor",
|
||||
"type": "color"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
)";
|
||||
|
||||
const char* materialTypeFilePath = "@exefolder@/Temp/simpleMaterialType.materialtype";
|
||||
|
||||
AZ::IO::FileIOStream file;
|
||||
EXPECT_TRUE(file.Open(materialTypeFilePath, AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeCreatePath));
|
||||
file.Write(simpleMaterialTypeJson.size(), simpleMaterialTypeJson.data());
|
||||
file.Close();
|
||||
|
||||
const AZStd::string inputJson = R"(
|
||||
{
|
||||
"materialType": "@exefolder@/Temp/simpleMaterialType.materialtype",
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"general": {
|
||||
"testColor": [1.0,1.0,1.0]
|
||||
}
|
||||
}
|
||||
}
|
||||
)";
|
||||
|
||||
MaterialSourceData material;
|
||||
JsonTestResult loadResult = LoadTestDataFromJson(material, inputJson);
|
||||
material.m_materialType = "@exefolder@/Temp/test.materialtype";
|
||||
AddPropertyGroup(material, "general");
|
||||
AddProperty(material, "general", "FieldDoesNotExist", 1.5f);
|
||||
|
||||
const bool elevateWarnings = true;
|
||||
|
||||
EXPECT_EQ(AZ::JsonSerializationResult::Tasks::ReadField, loadResult.m_jsonResultCode.GetTask());
|
||||
EXPECT_EQ(AZ::JsonSerializationResult::Processing::Completed, loadResult.m_jsonResultCode.GetProcessing());
|
||||
|
||||
// propertyLayout is a field in the material type, not the material
|
||||
EXPECT_TRUE(loadResult.ContainsMessage("[simpleMaterialType.materialtype]/propertyLayout/properties", "Successfully read"));
|
||||
}
|
||||
|
||||
TEST_F(MaterialSourceDataTests, Load_Error_PropertyNotFound)
|
||||
{
|
||||
const AZStd::string simpleMaterialTypeJson = R"(
|
||||
{
|
||||
"propertyLayout": {
|
||||
"properties": {
|
||||
"general": [
|
||||
{
|
||||
"name": "testColor",
|
||||
"type": "color"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
)";
|
||||
|
||||
const char* materialTypeFilePath = "@exefolder@/Temp/simpleMaterialType.materialtype";
|
||||
|
||||
AZ::IO::FileIOStream file;
|
||||
EXPECT_TRUE(file.Open(materialTypeFilePath, AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeCreatePath));
|
||||
file.Write(simpleMaterialTypeJson.size(), simpleMaterialTypeJson.data());
|
||||
file.Close();
|
||||
|
||||
const AZStd::string inputJson = R"(
|
||||
{
|
||||
"materialType": "@exefolder@/Temp/simpleMaterialType.materialtype",
|
||||
"materialTypeVersion": 1,
|
||||
"properties": {
|
||||
"general": {
|
||||
"doesNotExist": [1.0,1.0,1.0]
|
||||
}
|
||||
}
|
||||
}
|
||||
)";
|
||||
|
||||
MaterialSourceData material;
|
||||
JsonTestResult loadResult = LoadTestDataFromJson(material, inputJson);
|
||||
|
||||
EXPECT_EQ(AZ::JsonSerializationResult::Tasks::ReadField, loadResult.m_jsonResultCode.GetTask());
|
||||
EXPECT_EQ(AZ::JsonSerializationResult::Processing::PartialAlter, loadResult.m_jsonResultCode.GetProcessing());
|
||||
|
||||
EXPECT_TRUE(loadResult.ContainsMessage("/properties/general/doesNotExist", "Property 'general.doesNotExist' not found in material type."));
|
||||
ErrorMessageFinder errorMessageFinder("\"general.FieldDoesNotExist\" is not found");
|
||||
errorMessageFinder.AddIgnoredErrorMessage("Failed to build MaterialAsset", true);
|
||||
auto result = material.CreateMaterialAsset(AZ::Uuid::CreateRandom(), "test.material", AZ::RPI::MaterialAssetProcessingMode::PreBake, elevateWarnings);
|
||||
EXPECT_FALSE(result.IsSuccess());
|
||||
errorMessageFinder.CheckExpectedErrorsFound();
|
||||
}
|
||||
|
||||
TEST_F(MaterialSourceDataTests, CreateMaterialAsset_MultiLevelDataInheritance)
|
||||
@@ -896,7 +873,92 @@ namespace UnitTest
|
||||
AddProperty(materialSourceData, "general", "MyImage", AZStd::string("doesNotExist.streamingimage"));
|
||||
}, true); // In this case, the warning does happen even when the asset is not finalized, because the image path is checked earlier than that
|
||||
}
|
||||
|
||||
template<typename PropertyTypeT>
|
||||
void CheckSimilar(PropertyTypeT a, PropertyTypeT b);
|
||||
|
||||
template<> void CheckSimilar<float>(float a, float b) { EXPECT_FLOAT_EQ(a, b); }
|
||||
template<> void CheckSimilar<Vector2>(Vector2 a, Vector2 b) { EXPECT_TRUE(a.IsClose(b)); }
|
||||
template<> void CheckSimilar<Vector3>(Vector3 a, Vector3 b) { EXPECT_TRUE(a.IsClose(b)); }
|
||||
template<> void CheckSimilar<Vector4>(Vector4 a, Vector4 b) { EXPECT_TRUE(a.IsClose(b)); }
|
||||
template<> void CheckSimilar<Color>(Color a, Color b) { EXPECT_TRUE(a.IsClose(b)); }
|
||||
|
||||
template<typename PropertyTypeT> void CheckSimilar(PropertyTypeT a, PropertyTypeT b) { EXPECT_EQ(a, b); }
|
||||
|
||||
template<typename PropertyTypeT>
|
||||
void CheckEndToEndDataTypeResolution(const char* propertyName, const char* jsonValue, PropertyTypeT expectedFinalValue)
|
||||
{
|
||||
const char* groupName = "general";
|
||||
|
||||
const AZStd::string inputJson = AZStd::string::format(R"(
|
||||
{
|
||||
"materialType": "@exefolder@/Temp/test.materialtype",
|
||||
"properties": {
|
||||
"%s": {
|
||||
"%s": %s
|
||||
}
|
||||
}
|
||||
}
|
||||
)", groupName, propertyName, jsonValue);
|
||||
|
||||
MaterialSourceData material;
|
||||
JsonTestResult loadResult = LoadTestDataFromJson(material, inputJson);
|
||||
auto materialAssetResult = material.CreateMaterialAsset(Uuid::CreateRandom(), "test.material", AZ::RPI::MaterialAssetProcessingMode::PreBake);
|
||||
EXPECT_TRUE(materialAssetResult);
|
||||
MaterialPropertyIndex propertyIndex = materialAssetResult.GetValue()->GetMaterialPropertiesLayout()->FindPropertyIndex(MaterialPropertyId{groupName, propertyName}.GetFullName());
|
||||
CheckSimilar(expectedFinalValue, materialAssetResult.GetValue()->GetPropertyValues()[propertyIndex.GetIndex()].GetValue<PropertyTypeT>());
|
||||
}
|
||||
|
||||
TEST_F(MaterialSourceDataTests, TestEndToEndDataTypeResolution)
|
||||
{
|
||||
// Data types in .material files don't have to exactly match the types in .materialtype files as specified in the properties layout.
|
||||
// The exact location of the data type resolution has moved around over the life of the project, but the important thing is that
|
||||
// the data type in the source .material file gets applied correctly by the time a finalized MaterialAsset comes out the other side.
|
||||
|
||||
CheckEndToEndDataTypeResolution("MyBool", "true", true);
|
||||
CheckEndToEndDataTypeResolution("MyBool", "false", false);
|
||||
CheckEndToEndDataTypeResolution("MyBool", "1", true);
|
||||
CheckEndToEndDataTypeResolution("MyBool", "0", false);
|
||||
CheckEndToEndDataTypeResolution("MyBool", "1.0", true);
|
||||
CheckEndToEndDataTypeResolution("MyBool", "0.0", false);
|
||||
|
||||
CheckEndToEndDataTypeResolution("MyInt", "5", 5);
|
||||
CheckEndToEndDataTypeResolution("MyInt", "-6", -6);
|
||||
CheckEndToEndDataTypeResolution("MyInt", "-7.0", -7);
|
||||
CheckEndToEndDataTypeResolution("MyInt", "false", 0);
|
||||
CheckEndToEndDataTypeResolution("MyInt", "true", 1);
|
||||
|
||||
CheckEndToEndDataTypeResolution("MyUInt", "8", 8u);
|
||||
CheckEndToEndDataTypeResolution("MyUInt", "9.0", 9u);
|
||||
CheckEndToEndDataTypeResolution("MyUInt", "false", 0u);
|
||||
CheckEndToEndDataTypeResolution("MyUInt", "true", 1u);
|
||||
|
||||
CheckEndToEndDataTypeResolution("MyFloat", "2", 2.0f);
|
||||
CheckEndToEndDataTypeResolution("MyFloat", "-2", -2.0f);
|
||||
CheckEndToEndDataTypeResolution("MyFloat", "2.1", 2.1f);
|
||||
CheckEndToEndDataTypeResolution("MyFloat", "false", 0.0f);
|
||||
CheckEndToEndDataTypeResolution("MyFloat", "true", 1.0f);
|
||||
|
||||
CheckEndToEndDataTypeResolution("MyColor", "[0.1,0.2,0.3]", Color{0.1f, 0.2f, 0.3f, 1.0});
|
||||
CheckEndToEndDataTypeResolution("MyColor", "[0.1, 0.2, 0.3, 0.5]", Color{0.1f, 0.2f, 0.3f, 0.5f});
|
||||
CheckEndToEndDataTypeResolution("MyColor", "{\"RGB8\": [255, 0, 255, 0]}", Color{1.0f, 0.0f, 1.0f, 0.0f});
|
||||
|
||||
CheckEndToEndDataTypeResolution("MyFloat2", "[0.1,0.2]", Vector2{0.1f, 0.2f});
|
||||
CheckEndToEndDataTypeResolution("MyFloat2", "{\"y\":0.2, \"x\":0.1}", Vector2{0.1f, 0.2f});
|
||||
CheckEndToEndDataTypeResolution("MyFloat2", "{\"y\":0.2, \"x\":0.1, \"Z\":0.3}", Vector2{0.1f, 0.2f});
|
||||
CheckEndToEndDataTypeResolution("MyFloat2", "{\"y\":0.2, \"W\":0.4, \"x\":0.1, \"Z\":0.3}", Vector2{0.1f, 0.2f});
|
||||
|
||||
CheckEndToEndDataTypeResolution("MyFloat3", "[0.1,0.2,0.3]", Vector3{0.1f, 0.2f, 0.3f});
|
||||
CheckEndToEndDataTypeResolution("MyFloat3", "{\"y\":0.2, \"x\":0.1}", Vector3{0.1f, 0.2f, 0.0f});
|
||||
CheckEndToEndDataTypeResolution("MyFloat3", "{\"y\":0.2, \"x\":0.1, \"Z\":0.3}", Vector3{0.1f, 0.2f, 0.3f});
|
||||
CheckEndToEndDataTypeResolution("MyFloat3", "{\"y\":0.2, \"W\":0.4, \"x\":0.1, \"Z\":0.3}", Vector3{0.1f, 0.2f, 0.3f});
|
||||
|
||||
CheckEndToEndDataTypeResolution("MyFloat4", "[0.1,0.2,0.3,0.4]", Vector4{0.1f, 0.2f, 0.3f, 0.4f});
|
||||
CheckEndToEndDataTypeResolution("MyFloat4", "{\"y\":0.2, \"x\":0.1}", Vector4{0.1f, 0.2f, 0.0f, 0.0f});
|
||||
CheckEndToEndDataTypeResolution("MyFloat4", "{\"y\":0.2, \"x\":0.1, \"Z\":0.3}", Vector4{0.1f, 0.2f, 0.3f, 0.0f});
|
||||
CheckEndToEndDataTypeResolution("MyFloat4", "{\"y\":0.2, \"W\":0.4, \"x\":0.1, \"Z\":0.3}", Vector4{0.1f, 0.2f, 0.3f, 0.4f});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -25,7 +25,6 @@ set(FILES
|
||||
Include/Atom/RPI.Edit/Material/MaterialPropertyValueSourceData.h
|
||||
Include/Atom/RPI.Edit/Material/MaterialPropertyValueSourceDataSerializer.h
|
||||
Include/Atom/RPI.Edit/Material/MaterialSourceData.h
|
||||
Include/Atom/RPI.Edit/Material/MaterialSourceDataSerializer.h
|
||||
Include/Atom/RPI.Edit/Material/MaterialFunctorSourceData.h
|
||||
Include/Atom/RPI.Edit/Material/MaterialFunctorSourceDataSerializer.h
|
||||
Include/Atom/RPI.Edit/Material/MaterialFunctorSourceDataRegistration.h
|
||||
@@ -45,7 +44,6 @@ set(FILES
|
||||
Source/RPI.Edit/Material/MaterialPropertyValueSourceData.cpp
|
||||
Source/RPI.Edit/Material/MaterialPropertyValueSourceDataSerializer.cpp
|
||||
Source/RPI.Edit/Material/MaterialSourceData.cpp
|
||||
Source/RPI.Edit/Material/MaterialSourceDataSerializer.cpp
|
||||
Source/RPI.Edit/Material/MaterialFunctorSourceData.cpp
|
||||
Source/RPI.Edit/Material/MaterialFunctorSourceDataSerializer.cpp
|
||||
Source/RPI.Edit/Material/MaterialFunctorSourceDataRegistration.cpp
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "TestData/Materials/Types/AutoBrick.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"appearance": {
|
||||
"ao": 0.5252525210380554,
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "TestData/Materials/Types/AutoBrick.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"appearance": {
|
||||
"ao": 0.010100999847054482,
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardPBR.materialtype",
|
||||
"parentMaterial": "Materials/Presets/PBR/default_grid.material",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"occlusion": {
|
||||
"diffuseTextureMap": "TestData/Textures/cc0/Rock030_2K_AmbientOcclusion.jpg"
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/Skin.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/Skin.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"baseColor": {
|
||||
"color": [
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardMultilayerPBR.materialtype",
|
||||
"parentMaterial": "",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"blend": {
|
||||
"enableLayer2": true,
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardMultilayerPBR.materialtype",
|
||||
"parentMaterial": "TestData/Materials/StandardMultilayerPbrTestCases/001_ManyFeatures.material",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"blend": {
|
||||
"enableLayer2": false
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"description": "",
|
||||
"materialType": "Materials/Types/StandardMultilayerPBR.materialtype",
|
||||
"parentMaterial": "TestData/Materials/StandardMultilayerPbrTestCases/001_ManyFeatures.material",
|
||||
"propertyLayoutVersion": 3,
|
||||
"materialTypeVersion": 3,
|
||||
"properties": {
|
||||
"blend": {
|
||||
"enableLayer3": false
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user