Merge branch 'development' of https://github.com/o3de/o3de into MultiplayerWeapons

monroegm-disable-blank-issue-2
kberg-amzn 4 years ago
commit 52780f2130

@ -8,58 +8,43 @@ SPDX-License-Identifier: Apache-2.0 OR MIT
import logging import logging
import os import os
import pytest import pytest
import time
import typing import typing
from datetime import datetime from datetime import datetime
import ly_test_tools.log.log_monitor import ly_test_tools.log.log_monitor
# fixture imports # fixture imports
from AWS.Windows.resource_mappings.resource_mappings import resource_mappings
from assetpipeline.ap_fixtures.asset_processor_fixture import asset_processor from assetpipeline.ap_fixtures.asset_processor_fixture import asset_processor
from .aws_metrics_utils import aws_metrics_utils from .aws_metrics_utils import aws_metrics_utils
from .aws_metrics_custom_thread import AWSMetricsThread
AWS_METRICS_FEATURE_NAME = 'AWSMetrics' AWS_METRICS_FEATURE_NAME = 'AWSMetrics'
GAME_LOG_NAME = 'Game.log' GAME_LOG_NAME = 'Game.log'
CONTEXT_VARIABLE = ['-c', 'batch_processing=true']
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
def setup(launcher: ly_test_tools.launchers.Launcher, def setup(launcher: pytest.fixture,
cdk: pytest.fixture, asset_processor: pytest.fixture) -> pytest.fixture:
asset_processor: asset_processor,
resource_mappings: resource_mappings,
context_variable: str = '') -> typing.Tuple[ly_test_tools.log.log_monitor.LogMonitor, str, str]:
""" """
Set up the CDK application and start the log monitor. Set up the resource mapping configuration and start the log monitor.
:param launcher: Client launcher for running the test level. :param launcher: Client launcher for running the test level.
:param cdk: CDK application for deploying the AWS resources.
:param asset_processor: asset_processor fixture. :param asset_processor: asset_processor fixture.
:param resource_mappings: resource_mappings fixture.
:param context_variable: context_variable for enable optional CDK feature.
:return log monitor object, metrics file path and the metrics stack name. :return log monitor object, metrics file path and the metrics stack name.
""" """
logger.info(f'Cdk stack names:\n{cdk.list()}')
stacks = cdk.deploy(context_variable=context_variable)
resource_mappings.populate_output_keys(stacks)
asset_processor.start() asset_processor.start()
asset_processor.wait_for_idle() asset_processor.wait_for_idle()
metrics_file_path = os.path.join(launcher.workspace.paths.project(), 'user',
AWS_METRICS_FEATURE_NAME, 'metrics.json')
remove_file(metrics_file_path)
file_to_monitor = os.path.join(launcher.workspace.paths.project_log(), GAME_LOG_NAME) file_to_monitor = os.path.join(launcher.workspace.paths.project_log(), GAME_LOG_NAME)
remove_file(file_to_monitor)
# Initialize the log monitor. # Initialize the log monitor.
log_monitor = ly_test_tools.log.log_monitor.LogMonitor(launcher=launcher, log_file_path=file_to_monitor) log_monitor = ly_test_tools.log.log_monitor.LogMonitor(launcher=launcher, log_file_path=file_to_monitor)
return log_monitor, metrics_file_path, stacks[0] return log_monitor
def monitor_metrics_submission(log_monitor: ly_test_tools.log.log_monitor.LogMonitor) -> None: def monitor_metrics_submission(log_monitor: pytest.fixture) -> None:
""" """
Monitor the messages and notifications for submitting metrics. Monitor the messages and notifications for submitting metrics.
:param log_monitor: Log monitor to check the log messages. :param log_monitor: Log monitor to check the log messages.
@ -67,6 +52,7 @@ def monitor_metrics_submission(log_monitor: ly_test_tools.log.log_monitor.LogMon
expected_lines = [ expected_lines = [
'(Script) - Submitted metrics without buffer.', '(Script) - Submitted metrics without buffer.',
'(Script) - Submitted metrics with buffer.', '(Script) - Submitted metrics with buffer.',
'(Script) - Flushed the buffered metrics.',
'(Script) - Metrics is sent successfully.' '(Script) - Metrics is sent successfully.'
] ]
@ -87,87 +73,132 @@ def monitor_metrics_submission(log_monitor: ly_test_tools.log.log_monitor.LogMon
f'unexpected_lines values: {unexpected_lines}') f'unexpected_lines values: {unexpected_lines}')
def remove_file(file_path: str) -> None: def query_metrics_from_s3(aws_metrics_utils: pytest.fixture, stack_name: str) -> None:
""" """
Remove a local file and its directory. Verify that the metrics events are delivered to the S3 bucket and can be queried.
:param file_path: Path to the local file. aws_metrics_utils: aws_metrics_utils fixture.
stack_name: name of the CloudFormation stack.
""" """
if os.path.exists(file_path): analytics_bucket_name = aws_metrics_utils.get_analytics_bucket_name(stack_name)
os.remove(file_path) aws_metrics_utils.verify_s3_delivery(analytics_bucket_name)
logger.info('Metrics are sent to S3.')
aws_metrics_utils.run_glue_crawler(f'{stack_name}-EventsCrawler')
aws_metrics_utils.run_named_queries(f'{stack_name}-AthenaWorkGroup')
logger.info('Query metrics from S3 successfully.')
# Empty the S3 bucket. S3 buckets can only be deleted successfully when it doesn't contain any object.
aws_metrics_utils.empty_batch_analytics_bucket(analytics_bucket_name)
file_dir = os.path.dirname(file_path)
if os.path.exists(file_dir) and len(os.listdir(file_dir)) == 0:
os.rmdir(file_dir)
def verify_operational_metrics(aws_metrics_utils: pytest.fixture, stack_name: str, start_time: datetime) -> None:
"""
Verify that operational health metrics are delivered to CloudWatch.
aws_metrics_utils: aws_metrics_utils fixture.
stack_name: name of the CloudFormation stack.
start_time: Time when the game launcher starts.
"""
aws_metrics_utils.verify_cloud_watch_delivery(
'AWS/Lambda',
'Invocations',
[{'Name': 'FunctionName',
'Value': f'{stack_name}-AnalyticsProcessingLambdaName'}],
start_time)
logger.info('AnalyticsProcessingLambda metrics are sent to CloudWatch.')
aws_metrics_utils.verify_cloud_watch_delivery(
'AWS/Lambda',
'Invocations',
[{'Name': 'FunctionName',
'Value': f'{stack_name}-EventsProcessingLambda'}],
start_time)
logger.info('EventsProcessingLambda metrics are sent to CloudWatch.')
def start_kinesis_analytics_application(aws_metrics_utils: pytest.fixture, stack_name: str) -> None:
"""
Start the Kinesis analytics application for real-time analytics.
aws_metrics_utils: aws_metrics_utils fixture.
stack_name: name of the CloudFormation stack.
"""
analytics_application_name = f'{stack_name}-AnalyticsApplication'
aws_metrics_utils.start_kinesis_data_analytics_application(analytics_application_name)
@pytest.mark.SUITE_periodic @pytest.mark.SUITE_periodic
@pytest.mark.usefixtures('automatic_process_killer') @pytest.mark.usefixtures('automatic_process_killer')
@pytest.mark.parametrize('project', ['AutomatedTesting']) @pytest.mark.parametrize('project', ['AutomatedTesting'])
@pytest.mark.parametrize('level', ['AWS/Metrics']) @pytest.mark.parametrize('level', ['AWS/Metrics'])
@pytest.mark.parametrize('feature_name', [AWS_METRICS_FEATURE_NAME]) @pytest.mark.parametrize('feature_name', [AWS_METRICS_FEATURE_NAME])
@pytest.mark.usefixtures('resource_mappings')
@pytest.mark.parametrize('resource_mappings_filename', ['default_aws_resource_mappings.json']) @pytest.mark.parametrize('resource_mappings_filename', ['default_aws_resource_mappings.json'])
@pytest.mark.usefixtures('aws_credentials')
@pytest.mark.parametrize('profile_name', ['AWSAutomationTest']) @pytest.mark.parametrize('profile_name', ['AWSAutomationTest'])
@pytest.mark.parametrize('region_name', ['us-west-2']) @pytest.mark.parametrize('region_name', ['us-west-2'])
@pytest.mark.parametrize('assume_role_arn', ['arn:aws:iam::645075835648:role/o3de-automation-tests']) @pytest.mark.parametrize('assume_role_arn', ['arn:aws:iam::645075835648:role/o3de-automation-tests'])
@pytest.mark.usefixtures('cdk')
@pytest.mark.parametrize('session_name', ['o3de-Automation-session']) @pytest.mark.parametrize('session_name', ['o3de-Automation-session'])
@pytest.mark.parametrize('deployment_params', [CONTEXT_VARIABLE])
class TestAWSMetricsWindows(object): class TestAWSMetricsWindows(object):
def test_realtime_analytics_metrics_sent_to_cloudwatch(self, """
level: str, Test class to verify the real-time and batch analytics for metrics.
launcher: ly_test_tools.launchers.Launcher, """
asset_processor: pytest.fixture,
workspace: pytest.fixture, @pytest.mark.parametrize('destroy_stacks_on_teardown', [False])
aws_utils: pytest.fixture, def test_realtime_and_batch_analytics(self,
aws_credentials: pytest.fixture, level: str,
resource_mappings: pytest.fixture, launcher: pytest.fixture,
cdk: pytest.fixture, asset_processor: pytest.fixture,
aws_metrics_utils: aws_metrics_utils, workspace: pytest.fixture,
): aws_utils: pytest.fixture,
cdk: pytest.fixture,
aws_metrics_utils: pytest.fixture):
""" """
Tests that the submitted metrics are sent to CloudWatch for real-time analytics. Verify that the metrics events are sent to CloudWatch and S3 for analytics.
""" """
log_monitor, metrics_file_path, stack_name = setup(launcher, cdk, asset_processor, resource_mappings) # Start Kinesis analytics application on a separate thread to avoid blocking the test.
kinesis_analytics_application_thread = AWSMetricsThread(target=start_kinesis_analytics_application,
# Start the Kinesis Data Analytics application for real-time analytics. args=(aws_metrics_utils, cdk.stacks[0]))
analytics_application_name = f'{stack_name}-AnalyticsApplication' kinesis_analytics_application_thread.start()
aws_metrics_utils.start_kinesis_data_analytics_application(analytics_application_name) log_monitor = setup(launcher, asset_processor)
# Kinesis analytics application needs to be in the running state before we start the game launcher.
kinesis_analytics_application_thread.join()
launcher.args = ['+LoadLevel', level] launcher.args = ['+LoadLevel', level]
launcher.args.extend(['-rhi=null']) launcher.args.extend(['-rhi=null'])
start_time = datetime.utcnow()
with launcher.start(launch_ap=False): with launcher.start(launch_ap=False):
start_time = datetime.utcnow()
monitor_metrics_submission(log_monitor) monitor_metrics_submission(log_monitor)
# Verify that operational health metrics are delivered to CloudWatch.
aws_metrics_utils.verify_cloud_watch_delivery(
'AWS/Lambda',
'Invocations',
[{'Name': 'FunctionName',
'Value': f'{stack_name}-AnalyticsProcessingLambdaName'}],
start_time)
logger.info('Operational health metrics sent to CloudWatch.')
# Verify that real-time analytics metrics are delivered to CloudWatch.
aws_metrics_utils.verify_cloud_watch_delivery( aws_metrics_utils.verify_cloud_watch_delivery(
AWS_METRICS_FEATURE_NAME, AWS_METRICS_FEATURE_NAME,
'TotalLogins', 'TotalLogins',
[], [],
start_time) start_time)
logger.info('Real-time metrics sent to CloudWatch.') logger.info('Real-time metrics are sent to CloudWatch.')
# Stop the Kinesis Data Analytics application. # Run time-consuming verifications on separate threads to avoid blocking the test.
aws_metrics_utils.stop_kinesis_data_analytics_application(analytics_application_name) verification_threads = list()
verification_threads.append(
AWSMetricsThread(target=query_metrics_from_s3, args=(aws_metrics_utils, cdk.stacks[0])))
verification_threads.append(
AWSMetricsThread(target=verify_operational_metrics, args=(aws_metrics_utils, cdk.stacks[0], start_time)))
for thread in verification_threads:
thread.start()
for thread in verification_threads:
thread.join()
@pytest.mark.parametrize('destroy_stacks_on_teardown', [True])
def test_unauthorized_user_request_rejected(self, def test_unauthorized_user_request_rejected(self,
level: str, level: str,
launcher: ly_test_tools.launchers.Launcher, launcher: pytest.fixture,
cdk: pytest.fixture,
aws_credentials: pytest.fixture,
asset_processor: pytest.fixture, asset_processor: pytest.fixture,
resource_mappings: pytest.fixture,
workspace: pytest.fixture): workspace: pytest.fixture):
""" """
Tests that unauthorized users cannot send metrics events to the AWS backed backend. Verify that unauthorized users cannot send metrics events to the AWS backed backend.
""" """
log_monitor, metrics_file_path, stack_name = setup(launcher, cdk, asset_processor, resource_mappings) log_monitor = setup(launcher, asset_processor)
# Set invalid AWS credentials. # Set invalid AWS credentials.
launcher.args = ['+LoadLevel', level, '+cl_awsAccessKey', 'AKIAIOSFODNN7EXAMPLE', launcher.args = ['+LoadLevel', level, '+cl_awsAccessKey', 'AKIAIOSFODNN7EXAMPLE',
'+cl_awsSecretKey', 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'] '+cl_awsSecretKey', 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY']
@ -180,51 +211,3 @@ class TestAWSMetricsWindows(object):
halt_on_unexpected=True) halt_on_unexpected=True)
assert result, 'Metrics events are sent successfully by unauthorized user' assert result, 'Metrics events are sent successfully by unauthorized user'
logger.info('Unauthorized user is rejected to send metrics.') logger.info('Unauthorized user is rejected to send metrics.')
def test_batch_analytics_metrics_delivered_to_s3(self,
level: str,
launcher: ly_test_tools.launchers.Launcher,
cdk: pytest.fixture,
aws_credentials: pytest.fixture,
asset_processor: pytest.fixture,
resource_mappings: pytest.fixture,
aws_utils: pytest.fixture,
aws_metrics_utils: aws_metrics_utils,
workspace: pytest.fixture):
"""
Tests that the submitted metrics are sent to the data lake for batch analytics.
"""
log_monitor, metrics_file_path, stack_name = setup(launcher, cdk, asset_processor, resource_mappings,
context_variable='batch_processing=true')
analytics_bucket_name = aws_metrics_utils.get_analytics_bucket_name(stack_name)
launcher.args = ['+LoadLevel', level]
launcher.args.extend(['-rhi=null'])
with launcher.start(launch_ap=False):
start_time = datetime.utcnow()
monitor_metrics_submission(log_monitor)
# Verify that operational health metrics are delivered to CloudWatch.
aws_metrics_utils.verify_cloud_watch_delivery(
'AWS/Lambda',
'Invocations',
[{'Name': 'FunctionName',
'Value': f'{stack_name}-EventsProcessingLambda'}],
start_time)
logger.info('Operational health metrics sent to CloudWatch.')
aws_metrics_utils.verify_s3_delivery(analytics_bucket_name)
logger.info('Metrics sent to S3.')
# Run the glue crawler to populate the AWS Glue Data Catalog with tables.
aws_metrics_utils.run_glue_crawler(f'{stack_name}-EventsCrawler')
# Run named queries on the table to verify the batch analytics.
aws_metrics_utils.run_named_queries(f'{stack_name}-AthenaWorkGroup')
logger.info('Query metrics from S3 successfully.')
# Kinesis Data Firehose buffers incoming data before it delivers it to Amazon S3. Sleep for the
# default interval (60s) to make sure that all the metrics are sent to the bucket before cleanup.
time.sleep(60)
# Empty the S3 bucket. S3 buckets can only be deleted successfully when it doesn't contain any object.
aws_metrics_utils.empty_s3_bucket(analytics_bucket_name)

@ -0,0 +1,29 @@
"""
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
"""
from threading import Thread
class AWSMetricsThread(Thread):
"""
Custom thread for raising assertion errors on the main thread.
"""
def __init__(self, **kwargs):
super().__init__(**kwargs)
self._error = None
def run(self) -> None:
try:
super().run()
except AssertionError as e:
self._error = e
def join(self, **kwargs) -> None:
super().join(**kwargs)
if self._error:
raise AssertionError(self._error)

@ -13,7 +13,6 @@ import typing
from datetime import datetime from datetime import datetime
from botocore.exceptions import WaiterError from botocore.exceptions import WaiterError
from AWS.common.aws_utils import AwsUtils
from .aws_metrics_waiters import KinesisAnalyticsApplicationUpdatedWaiter, \ from .aws_metrics_waiters import KinesisAnalyticsApplicationUpdatedWaiter, \
CloudWatchMetricsDeliveredWaiter, DataLakeMetricsDeliveredWaiter, GlueCrawlerReadyWaiter CloudWatchMetricsDeliveredWaiter, DataLakeMetricsDeliveredWaiter, GlueCrawlerReadyWaiter
@ -29,7 +28,7 @@ class AWSMetricsUtils:
Provide utils functions for the AWSMetrics gem to interact with the deployed resources. Provide utils functions for the AWSMetrics gem to interact with the deployed resources.
""" """
def __init__(self, aws_utils: AwsUtils): def __init__(self, aws_utils: pytest.fixture):
self._aws_util = aws_utils self._aws_util = aws_utils
def start_kinesis_data_analytics_application(self, application_name: str) -> None: def start_kinesis_data_analytics_application(self, application_name: str) -> None:
@ -199,14 +198,13 @@ class AWSMetricsUtils:
assert state == 'SUCCEEDED', f'Failed to run the named query {named_query.get("Name", {})}' assert state == 'SUCCEEDED', f'Failed to run the named query {named_query.get("Name", {})}'
def empty_s3_bucket(self, bucket_name: str) -> None: def empty_batch_analytics_bucket(self, bucket_name: str) -> None:
""" """
Empty the S3 bucket following: Empty the S3 bucket following:
https://boto3.amazonaws.com/v1/documentation/api/latest/guide/migrations3.html https://boto3.amazonaws.com/v1/documentation/api/latest/guide/migrations3.html
:param bucket_name: Name of the S3 bucket. :param bucket_name: Name of the S3 bucket.
""" """
s3 = self._aws_util.resource('s3') s3 = self._aws_util.resource('s3')
bucket = s3.Bucket(bucket_name) bucket = s3.Bucket(bucket_name)

@ -72,15 +72,14 @@ class Cdk:
f'\nError:{error.stderr}') f'\nError:{error.stderr}')
def setup(self, cdk_path: str, project: str, account_id: str, def setup(self, cdk_path: str, project: str, account_id: str,
workspace: pytest.fixture, session: boto3.session.Session, bootstrap_required: bool): workspace: pytest.fixture, session: boto3.session.Session):
""" """
:param cdk_path: Path where cdk app.py is stored. :param cdk_path: Path where cdk app.py is stored.
:param project: Project name used for cdk project name env variable. :param project: Project name used for cdk project name env variable.
:param account_id: AWS account id to use with cdk application. :param account_id: AWS account id to use with cdk application.
:param workspace: ly_test_tools workspace fixture. :param workspace: ly_test_tools workspace fixture.
:param workspace: bootstrap_required deploys bootstrap stack. :param session: Current boto3 session, provides credentials and region.
""" """
self._cdk_env = os.environ.copy() self._cdk_env = os.environ.copy()
unique_id = uuid.uuid4().hex[-4:] unique_id = uuid.uuid4().hex[-4:]
self._cdk_env['O3DE_AWS_PROJECT_NAME'] = project[:4] + unique_id if len(project) > 4 else project + unique_id self._cdk_env['O3DE_AWS_PROJECT_NAME'] = project[:4] + unique_id if len(project) > 4 else project + unique_id
@ -104,8 +103,7 @@ class Cdk:
logger.info(f'Installing cdk python dependencies: {output}') logger.info(f'Installing cdk python dependencies: {output}')
if bootstrap_required: self.bootstrap()
self.bootstrap()
def bootstrap(self) -> None: def bootstrap(self) -> None:
""" """
@ -124,15 +122,19 @@ class Cdk:
logger.warning(f'Failed creating Bootstrap stack {BOOTSTRAP_STACK_NAME} not found. ' logger.warning(f'Failed creating Bootstrap stack {BOOTSTRAP_STACK_NAME} not found. '
f'\nError:{clientError["Error"]["Message"]}') f'\nError:{clientError["Error"]["Message"]}')
def list(self) -> List[str]: def list(self, deployment_params: List[str] = None) -> List[str]:
""" """
lists cdk stack names lists cdk stack names.
:return List of cdk stack names :param deployment_params: Deployment parameters like --all can be passed in this way.
:return List of cdk stack names.
""" """
if not self._cdk_path: if not self._cdk_path:
return [] return []
list_cdk_application_cmd = ['cdk', 'list'] list_cdk_application_cmd = ['cdk', 'list']
if deployment_params:
list_cdk_application_cmd.extend(deployment_params)
output = process_utils.check_output( output = process_utils.check_output(
list_cdk_application_cmd, list_cdk_application_cmd,
cwd=self._cdk_path, cwd=self._cdk_path,
@ -141,36 +143,36 @@ class Cdk:
return output.splitlines() return output.splitlines()
def synthesize(self) -> None: def synthesize(self, deployment_params: List[str] = None) -> None:
""" """
Synthesizes all cdk stacks Synthesizes all cdk stacks.
:param deployment_params: Deployment parameters like --all can be passed in this way.
""" """
if not self._cdk_path: if not self._cdk_path:
return return
list_cdk_application_cmd = ['cdk', 'synth'] synth_cdk_application_cmd = ['cdk', 'synth']
if deployment_params:
synth_cdk_application_cmd.extend(deployment_params)
process_utils.check_output( process_utils.check_output(
list_cdk_application_cmd, synth_cdk_application_cmd,
cwd=self._cdk_path, cwd=self._cdk_path,
env=self._cdk_env, env=self._cdk_env,
shell=True) shell=True)
def deploy(self, context_variable: str = '', additonal_params: List[str] = None) -> List[str]: def deploy(self, deployment_params: List[str] = None) -> List[str]:
""" """
Deploys all the CDK stacks. Deploys all the CDK stacks.
:param context_variable: Context variable for enabling optional features. :param deployment_params: Deployment parameters like --all can be passed in this way.
:param additonal_params: Additonal parameters like --all can be passed in this way.
:return List of deployed stack arns. :return List of deployed stack arns.
""" """
if not self._cdk_path: if not self._cdk_path:
return [] return []
deploy_cdk_application_cmd = ['cdk', 'deploy', '--require-approval', 'never'] deploy_cdk_application_cmd = ['cdk', 'deploy', '--require-approval', 'never']
if additonal_params: if deployment_params:
deploy_cdk_application_cmd.extend(additonal_params) deploy_cdk_application_cmd.extend(deployment_params)
if context_variable:
deploy_cdk_application_cmd.extend(['-c', f'{context_variable}'])
output = process_utils.check_output( output = process_utils.check_output(
deploy_cdk_application_cmd, deploy_cdk_application_cmd,
@ -178,21 +180,23 @@ class Cdk:
env=self._cdk_env, env=self._cdk_env,
shell=True) shell=True)
stacks = []
for line in output.splitlines(): for line in output.splitlines():
line_sections = line.split('/') line_sections = line.split('/')
assert len(line_sections), 3 assert len(line_sections), 3
stacks.append(line.split('/')[-2]) self._stacks.append(line.split('/')[-2])
return stacks return self._stacks
def destroy(self) -> None: def destroy(self, deployment_params: List[str] = None) -> None:
""" """
Destroys the cdk application. Destroys the cdk application.
:param deployment_params: Deployment parameters like --all can be passed in this way.
""" """
logger.info(f'CDK Path {self._cdk_path}') logger.info(f'CDK Path {self._cdk_path}')
destroy_cdk_application_cmd = ['cdk', 'destroy', '--all', '-f'] destroy_cdk_application_cmd = ['cdk', 'destroy', '-f']
if deployment_params:
destroy_cdk_application_cmd.extend(deployment_params)
try: try:
process_utils.check_output( process_utils.check_output(
@ -238,3 +242,7 @@ class Cdk:
# self._session.client('cloudformation').delete_stack( # self._session.client('cloudformation').delete_stack(
# StackName=BOOTSTRAP_STACK_NAME # StackName=BOOTSTRAP_STACK_NAME
# ) # )
@property
def stacks(self):
return self._stacks

@ -10,10 +10,7 @@ import logging
import ly_test_tools.log.log_monitor import ly_test_tools.log.log_monitor
# fixture imports # fixture imports
from AWS.Windows.resource_mappings.resource_mappings import resource_mappings from assetpipeline.ap_fixtures.asset_processor_fixture import asset_processor
from AWS.Windows.cdk.cdk_utils import Cdk
from AWS.common.aws_utils import AwsUtils
from assetpipeline.ap_fixtures.asset_processor_fixture import asset_processor as asset_processor
AWS_PROJECT_NAME = 'AWS-AutomationTest' AWS_PROJECT_NAME = 'AWS-AutomationTest'
AWS_CLIENT_AUTH_FEATURE_NAME = 'AWSClientAuth' AWS_CLIENT_AUTH_FEATURE_NAME = 'AWSClientAuth'
@ -37,11 +34,47 @@ logger = logging.getLogger(__name__)
@pytest.mark.parametrize('region_name', ['us-west-2']) @pytest.mark.parametrize('region_name', ['us-west-2'])
@pytest.mark.parametrize('assume_role_arn', ['arn:aws:iam::645075835648:role/o3de-automation-tests']) @pytest.mark.parametrize('assume_role_arn', ['arn:aws:iam::645075835648:role/o3de-automation-tests'])
@pytest.mark.parametrize('session_name', ['o3de-Automation-session']) @pytest.mark.parametrize('session_name', ['o3de-Automation-session'])
class TestAWSClientAuthPasswordSignIn(object): @pytest.mark.usefixtures('cdk')
@pytest.mark.parametrize('deployment_params', [[]])
class TestAWSClientAuthWindows(object):
""" """
Test class to verify AWS Cognito IDP Password sign in and Cognito Identity pool authenticated authorization. Test class to verify AWS Client Auth gem features on Windows.
""" """
@pytest.mark.parametrize('level', ['AWS/ClientAuth'])
@pytest.mark.parametrize('destroy_stacks_on_teardown', [False])
def test_anonymous_credentials(self,
level: str,
launcher: pytest.fixture,
resource_mappings: pytest.fixture,
workspace: pytest.fixture,
asset_processor: pytest.fixture
):
"""
Test to verify AWS Cognito Identity pool anonymous authorization.
Setup: Deploys cdk and updates resource mapping file.
Tests: Getting credentials when no credentials are configured
Verification: Log monitor looks for success credentials log.
"""
asset_processor.start()
asset_processor.wait_for_idle()
file_to_monitor = os.path.join(launcher.workspace.paths.project_log(), GAME_LOG_NAME)
log_monitor = ly_test_tools.log.log_monitor.LogMonitor(launcher=launcher, log_file_path=file_to_monitor)
launcher.args = ['+LoadLevel', level]
launcher.args.extend(['-rhi=null'])
with launcher.start(launch_ap=False):
result = log_monitor.monitor_log_for_lines(
expected_lines=['(Script) - Success anonymous credentials'],
unexpected_lines=['(Script) - Fail anonymous credentials'],
halt_on_unexpected=True,
)
assert result, 'Anonymous credentials fetched successfully.'
@pytest.mark.parametrize('destroy_stacks_on_teardown', [True])
def test_password_signin_credentials(self, def test_password_signin_credentials(self,
launcher: pytest.fixture, launcher: pytest.fixture,
cdk: pytest.fixture, cdk: pytest.fixture,
@ -51,13 +84,12 @@ class TestAWSClientAuthPasswordSignIn(object):
aws_utils: pytest.fixture aws_utils: pytest.fixture
): ):
""" """
Test to verify AWS Cognito IDP Password sign in and Cognito Identity pool authenticated authorization.
Setup: Deploys cdk and updates resource mapping file. Setup: Deploys cdk and updates resource mapping file.
Tests: Sign up new test user, admin confirm the user, sign in and get aws credentials. Tests: Sign up new test user, admin confirm the user, sign in and get aws credentials.
Verification: Log monitor looks for success credentials log. Verification: Log monitor looks for success credentials log.
""" """
logger.info(f'Cdk stack names:\n{cdk.list()}')
stacks = cdk.deploy()
resource_mappings.populate_output_keys(stacks)
asset_processor.start() asset_processor.start()
asset_processor.wait_for_idle() asset_processor.wait_for_idle()

@ -1,77 +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
"""
import pytest
import os
import logging
import ly_test_tools.log.log_monitor
# fixture imports
from AWS.Windows.resource_mappings.resource_mappings import resource_mappings
from AWS.Windows.cdk.cdk_utils import Cdk
from AWS.common.aws_utils import AwsUtils
from assetpipeline.ap_fixtures.asset_processor_fixture import asset_processor as asset_processor
AWS_PROJECT_NAME = 'AWS-AutomationTest'
AWS_CLIENT_AUTH_FEATURE_NAME = 'AWSClientAuth'
AWS_CLIENT_AUTH_DEFAULT_PROFILE_NAME = 'default'
GAME_LOG_NAME = 'Game.log'
logger = logging.getLogger(__name__)
@pytest.mark.SUITE_periodic
@pytest.mark.usefixtures('automatic_process_killer')
@pytest.mark.usefixtures('asset_processor')
@pytest.mark.usefixtures('workspace')
@pytest.mark.parametrize('project', ['AutomatedTesting'])
@pytest.mark.parametrize('level', ['AWS/ClientAuth'])
@pytest.mark.usefixtures('cdk')
@pytest.mark.parametrize('feature_name', [AWS_CLIENT_AUTH_FEATURE_NAME])
@pytest.mark.usefixtures('resource_mappings')
@pytest.mark.parametrize('resource_mappings_filename', ['default_aws_resource_mappings.json'])
@pytest.mark.usefixtures('aws_utils')
@pytest.mark.parametrize('region_name', ['us-west-2'])
@pytest.mark.parametrize('assume_role_arn', ['arn:aws:iam::645075835648:role/o3de-automation-tests'])
@pytest.mark.parametrize('session_name', ['o3de-Automation-session'])
class TestAWSClientAuthAnonymousCredentials(object):
"""
Test class to verify AWS Cognito Identity pool anonymous authorization.
"""
def test_anonymous_credentials(self,
level: str,
launcher: pytest.fixture,
cdk: pytest.fixture,
resource_mappings: pytest.fixture,
workspace: pytest.fixture,
asset_processor: pytest.fixture
):
"""
Setup: Deploys cdk and updates resource mapping file.
Tests: Getting AWS credentials for no signed in user.
Verification: Log monitor looks for success credentials log.
"""
logger.info(f'Cdk stack names:\n{cdk.list()}')
stacks = cdk.deploy()
resource_mappings.populate_output_keys(stacks)
asset_processor.start()
asset_processor.wait_for_idle()
file_to_monitor = os.path.join(launcher.workspace.paths.project_log(), GAME_LOG_NAME)
log_monitor = ly_test_tools.log.log_monitor.LogMonitor(launcher=launcher, log_file_path=file_to_monitor)
launcher.args = ['+LoadLevel', level]
launcher.args.extend(['-rhi=null'])
with launcher.start(launch_ap=False):
result = log_monitor.monitor_log_for_lines(
expected_lines=['(Script) - Success anonymous credentials'],
unexpected_lines=['(Script) - Fail anonymous credentials'],
halt_on_unexpected=True,
)
assert result, 'Anonymous credentials fetched successfully.'

@ -7,7 +7,8 @@ SPDX-License-Identifier: Apache-2.0 OR MIT
import os import os
import logging import logging
import time import typing
import shutil
import pytest import pytest
import ly_test_tools import ly_test_tools
@ -16,7 +17,6 @@ import ly_test_tools.environment.process_utils as process_utils
import ly_test_tools.o3de.asset_processor_utils as asset_processor_utils import ly_test_tools.o3de.asset_processor_utils as asset_processor_utils
from botocore.exceptions import ClientError from botocore.exceptions import ClientError
from AWS.Windows.resource_mappings.resource_mappings import resource_mappings
from assetpipeline.ap_fixtures.asset_processor_fixture import asset_processor from assetpipeline.ap_fixtures.asset_processor_fixture import asset_processor
AWS_CORE_FEATURE_NAME = 'AWSCore' AWS_CORE_FEATURE_NAME = 'AWSCore'
@ -29,18 +29,49 @@ GAME_LOG_NAME = 'Game.log'
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
def setup(launcher: pytest.fixture, cdk: pytest.fixture, resource_mappings: pytest.fixture, asset_processor: pytest.fixture): def setup(launcher: pytest.fixture, asset_processor: pytest.fixture) -> typing.Tuple[pytest.fixture, str]:
"""
Set up the resource mapping configuration and start the log monitor.
:param launcher: Client launcher for running the test level.
:param asset_processor: asset_processor fixture.
:return log monitor object, metrics file path and the metrics stack name.
"""
# Create the temporary directory for downloading test file from S3.
user_dir = os.path.join(launcher.workspace.paths.project(), 'user')
s3_download_dir = os.path.join(user_dir, 's3_download')
if not os.path.exists(s3_download_dir):
os.makedirs(s3_download_dir)
asset_processor_utils.kill_asset_processor() asset_processor_utils.kill_asset_processor()
logger.info(f'Cdk stack names:\n{cdk.list()}')
stacks = cdk.deploy(additonal_params=['--all'])
resource_mappings.populate_output_keys(stacks)
asset_processor.start() asset_processor.start()
asset_processor.wait_for_idle() asset_processor.wait_for_idle()
file_to_monitor = os.path.join(launcher.workspace.paths.project_log(), GAME_LOG_NAME) file_to_monitor = os.path.join(launcher.workspace.paths.project_log(), GAME_LOG_NAME)
log_monitor = ly_test_tools.log.log_monitor.LogMonitor(launcher=launcher, log_file_path=file_to_monitor) log_monitor = ly_test_tools.log.log_monitor.LogMonitor(launcher=launcher, log_file_path=file_to_monitor)
return log_monitor return log_monitor, s3_download_dir
def write_test_data_to_dynamodb_table(resource_mappings: pytest.fixture, aws_utils: pytest.fixture) -> None:
"""
Write test data to the DynamoDB table created by the CDK application.
:param resource_mappings: resource_mappings fixture.
:param aws_utils: aws_utils fixture.
"""
table_name = resource_mappings.get_resource_name_id("AWSCore.ExampleDynamoTableOutput")
try:
aws_utils.client('dynamodb').put_item(
TableName=table_name,
Item={
'id': {
'S': 'Item1'
}
}
)
logger.info(f'Loaded data into table {table_name}')
except ClientError:
logger.exception(f'Failed to load data into table {table_name}')
raise
@pytest.mark.SUITE_periodic @pytest.mark.SUITE_periodic
@ -58,130 +89,57 @@ def setup(launcher: pytest.fixture, cdk: pytest.fixture, resource_mappings: pyte
@pytest.mark.parametrize('resource_mappings_filename', [AWS_RESOURCE_MAPPING_FILE_NAME]) @pytest.mark.parametrize('resource_mappings_filename', [AWS_RESOURCE_MAPPING_FILE_NAME])
@pytest.mark.usefixtures('aws_credentials') @pytest.mark.usefixtures('aws_credentials')
@pytest.mark.parametrize('profile_name', ['AWSAutomationTest']) @pytest.mark.parametrize('profile_name', ['AWSAutomationTest'])
@pytest.mark.usefixtures('cdk')
@pytest.mark.parametrize('deployment_params', [['--all']])
@pytest.mark.parametrize('destroy_stacks_on_teardown', [True])
class TestAWSCoreAWSResourceInteraction(object): class TestAWSCoreAWSResourceInteraction(object):
""" """
Test class to verify AWSCore can downloading a file from S3. Test class to verify the scripting behavior for the AWSCore gem.
""" """
def test_download_from_s3(self,
level: str,
launcher: pytest.fixture,
cdk: pytest.fixture,
workspace: pytest.fixture,
asset_processor: pytest.fixture,
resource_mappings: pytest.fixture
):
"""
Setup: Deploys cdk and updates resource mapping file.
Tests: Getting AWS credentials for no signed in user.
Verification: Log monitor looks for success download. The existence and contents of the file are also verified.
"""
log_monitor = setup(launcher, cdk, resource_mappings, asset_processor)
launcher.args = ['+LoadLevel', level]
launcher.args.extend(['-rhi=null'])
user_dir = os.path.join(workspace.paths.project(), 'user')
download_dir = os.path.join(user_dir, 's3_download')
if not os.path.exists(download_dir):
os.makedirs(download_dir)
with launcher.start(launch_ap=False):
result = log_monitor.monitor_log_for_lines(
expected_lines=['(Script) - [S3] Head object request is done',
'(Script) - [S3] Head object success: Object example.txt is found.',
'(Script) - [S3] Get object success: Object example.txt is downloaded.'],
unexpected_lines=['(Script) - [S3] Head object error: No response body.',
'(Script) - [S3] Get object error: Request validation failed, output file directory doesn\'t exist.'],
halt_on_unexpected=True
)
assert result, "Expected lines weren't found."
download_path = os.path.join(download_dir, 'output.txt') @pytest.mark.parametrize('expected_lines', [
['(Script) - [S3] Head object request is done',
file_was_downloaded = os.path.exists(download_path) '(Script) - [S3] Head object success: Object example.txt is found.',
# clean up the file directories. '(Script) - [S3] Get object success: Object example.txt is downloaded.',
if file_was_downloaded: '(Script) - [Lambda] Completed Invoke',
os.remove(download_path) '(Script) - [Lambda] Invoke success: {"statusCode": 200, "body": {}}',
os.rmdir(download_dir) '(Script) - [DynamoDB] Results finished']])
@pytest.mark.parametrize('unexpected_lines', [
assert file_was_downloaded, 'The expected file wasn\'t successfully downloaded' ['(Script) - [S3] Head object error: No response body.',
'(Script) - [S3] Get object error: Request validation failed, output file directory doesn\'t exist.',
def test_invoke_lambda(self, '(Script) - Request validation failed, output file miss full path.',
level: str, '(Script) - ']])
launcher: pytest.fixture, def test_scripting_behavior(self,
cdk: pytest.fixture,
resource_mappings: pytest.fixture,
workspace: pytest.fixture,
asset_processor: pytest.fixture
):
"""
Setup: Deploys the CDK.
Tests: Runs the test level.
Verification: Searches the logs for the expected output from the example lambda.
"""
log_monitor = setup(launcher, cdk, resource_mappings, asset_processor)
launcher.args = ['+LoadLevel', level]
launcher.args.extend(['-rhi=null'])
with launcher.start(launch_ap=False):
result = log_monitor.monitor_log_for_lines(
expected_lines=['(Script) - [Lambda] Completed Invoke',
'(Script) - [Lambda] Invoke success: {"statusCode": 200, "body": {}}'],
unexpected_lines=['(Script) - Request validation failed, output file miss full path.',
'(Script) - '],
halt_on_unexpected=True
)
assert result
def test_get_dynamodb_value(self,
level: str, level: str,
launcher: pytest.fixture, launcher: pytest.fixture,
cdk: pytest.fixture,
resource_mappings: pytest.fixture,
workspace: pytest.fixture, workspace: pytest.fixture,
asset_processor: pytest.fixture, asset_processor: pytest.fixture,
resource_mappings: pytest.fixture,
aws_utils: pytest.fixture, aws_utils: pytest.fixture,
): expected_lines: typing.List[str],
unexpected_lines: typing.List[str]):
""" """
Setup: Deploys the CDK application Setup: Deploys cdk and updates resource mapping file.
Test: Runs a launcher with a level that loads a scriptcanvas that pulls a DynamoDB table value. Tests: Interact with AWS S3, DynamoDB and Lambda services.
Verification: The value is output in the logs and verified by the test. Verification: Script canvas nodes can communicate with AWS services successfully.
""" """
def write_test_table_data(): log_monitor, s3_download_dir = setup(launcher, asset_processor)
client = aws_utils.client('dynamodb') write_test_data_to_dynamodb_table(resource_mappings, aws_utils)
table_name = resource_mappings.get_resource_name_id("AWSCore.ExampleDynamoTableOutput")
try:
client.put_item(
TableName=table_name,
Item={
'id': {
'S': 'Item1'
}
}
)
logger.info(f'Loaded data into table {table_name}')
except ClientError:
logger.exception(f'Failed to load data into table {table_name}')
raise
log_monitor = setup(launcher, cdk, resource_mappings, asset_processor)
write_test_table_data()
launcher.args = ['+LoadLevel', level] launcher.args = ['+LoadLevel', level]
launcher.args.extend(['-rhi=null']) launcher.args.extend(['-rhi=null'])
with launcher.start(launch_ap=False): with launcher.start(launch_ap=False):
result = log_monitor.monitor_log_for_lines( result = log_monitor.monitor_log_for_lines(
expected_lines=['(Script) - [DynamoDB] Results finished'], expected_lines=expected_lines,
unexpected_lines=['(Script) - Request validation failed, output file miss full path.', unexpected_lines=unexpected_lines,
'(Script) - '],
halt_on_unexpected=True halt_on_unexpected=True
) )
assert result assert result, "Expected lines weren't found."
assert os.path.exists(os.path.join(s3_download_dir, 'output.txt')), \
'The expected file wasn\'t successfully downloaded.'
# clean up the file directories.
shutil.rmtree(s3_download_dir)

@ -6,7 +6,6 @@ SPDX-License-Identifier: Apache-2.0 OR MIT
""" """
import os import os
from os.path import abspath
import pytest import pytest
import json import json
import logging import logging
@ -107,38 +106,3 @@ class ResourceMappings:
def get_resource_name_id(self, resource_key: str): def get_resource_name_id(self, resource_key: str):
return self._resource_mappings[AWS_RESOURCE_MAPPINGS_KEY][resource_key]['Name/ID'] return self._resource_mappings[AWS_RESOURCE_MAPPINGS_KEY][resource_key]['Name/ID']
@pytest.fixture(scope='function')
def resource_mappings(
request: pytest.fixture,
project: str,
feature_name: str,
resource_mappings_filename: str,
workspace: pytest.fixture,
aws_utils: pytest.fixture) -> ResourceMappings:
"""
Fixture for setting up resource mappings file.
:param request: _pytest.fixtures.SubRequest class that handles getting
a pytest fixture from a pytest function/fixture.
:param project: Project to find resource mapping file.
:param feature_name: AWS Gem name that is prepended to resource mapping keys.
:param resource_mappings_filename: Name of resource mapping file.
:param workspace: ly_test_tools workspace fixture.
:param aws_utils: AWS utils fixture.
:return: ResourceMappings class object.
"""
path = f'{workspace.paths.engine_root()}/{project}/Config/{resource_mappings_filename}'
logger.info(f'Resource mapping path : {path}')
logger.info(f'Resource mapping resolved path : {abspath(path)}')
resource_mappings_obj = ResourceMappings(abspath(path), aws_utils.assume_session().region_name, feature_name,
aws_utils.assume_account_id(), workspace,
aws_utils.client('cloudformation'))
def teardown():
resource_mappings_obj.clear_output_keys()
request.addfinalizer(teardown)
return resource_mappings_obj

@ -4,11 +4,15 @@ For complete copyright and license terms please see the LICENSE at the root of t
SPDX-License-Identifier: Apache-2.0 OR MIT SPDX-License-Identifier: Apache-2.0 OR MIT
""" """
import pytest
import logging import logging
from os.path import abspath
import pytest
import typing
from AWS.common.aws_utils import AwsUtils from AWS.common.aws_utils import AwsUtils
from AWS.common.aws_credentials import AwsCredentials from AWS.common.aws_credentials import AwsCredentials
from AWS.Windows.cdk.cdk_utils import Cdk from AWS.Windows.cdk.cdk_utils import Cdk
from AWS.Windows.resource_mappings.resource_mappings import ResourceMappings
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -42,6 +46,41 @@ def aws_utils(
pytest.cdk_obj = None pytest.cdk_obj = None
@pytest.fixture(scope='function')
def resource_mappings(
request: pytest.fixture,
project: str,
feature_name: str,
resource_mappings_filename: str,
workspace: pytest.fixture,
aws_utils: pytest.fixture) -> ResourceMappings:
"""
Fixture for setting up resource mappings file.
:param request: _pytest.fixtures.SubRequest class that handles getting
a pytest fixture from a pytest function/fixture.
:param project: Project to find resource mapping file.
:param feature_name: AWS Gem name that is prepended to resource mapping keys.
:param resource_mappings_filename: Name of resource mapping file.
:param workspace: ly_test_tools workspace fixture.
:param aws_utils: AWS utils fixture.
:return: ResourceMappings class object.
"""
path = f'{workspace.paths.engine_root()}/{project}/Config/{resource_mappings_filename}'
logger.info(f'Resource mapping path : {path}')
logger.info(f'Resource mapping resolved path : {abspath(path)}')
resource_mappings_obj = ResourceMappings(abspath(path), aws_utils.assume_session().region_name, feature_name,
aws_utils.assume_account_id(), workspace,
aws_utils.client('cloudformation'))
def teardown():
resource_mappings_obj.clear_output_keys()
request.addfinalizer(teardown)
return resource_mappings_obj
@pytest.fixture(scope='function') @pytest.fixture(scope='function')
def cdk( def cdk(
request: pytest.fixture, request: pytest.fixture,
@ -49,8 +88,9 @@ def cdk(
feature_name: str, feature_name: str,
workspace: pytest.fixture, workspace: pytest.fixture,
aws_utils: pytest.fixture, aws_utils: pytest.fixture,
bootstrap_required: bool = True, resource_mappings: pytest.fixture,
destroy_stacks_on_teardown: bool = True) -> Cdk: deployment_params: typing.List[str],
destroy_stacks_on_teardown: bool) -> Cdk:
""" """
Fixture for setting up a Cdk Fixture for setting up a Cdk
:param request: _pytest.fixtures.SubRequest class that handles getting :param request: _pytest.fixtures.SubRequest class that handles getting
@ -59,8 +99,8 @@ def cdk(
:param feature_name: Feature gem name to expect cdk folder in. :param feature_name: Feature gem name to expect cdk folder in.
:param workspace: ly_test_tools workspace fixture. :param workspace: ly_test_tools workspace fixture.
:param aws_utils: aws_utils fixture. :param aws_utils: aws_utils fixture.
:param bootstrap_required: Whether the bootstrap stack needs to be created to :param resource_mappings: resource_mappings fixture.
provision resources the AWS CDK needs to perform the deployment. :param deployment_params: Parameters for the CDK application deployment.
:param destroy_stacks_on_teardown: option to control calling destroy ot the end of test. :param destroy_stacks_on_teardown: option to control calling destroy ot the end of test.
:return Cdk class object. :return Cdk class object.
""" """
@ -70,22 +110,27 @@ def cdk(
if pytest.cdk_obj is None: if pytest.cdk_obj is None:
pytest.cdk_obj = Cdk() pytest.cdk_obj = Cdk()
pytest.cdk_obj.setup(cdk_path, project, aws_utils.assume_account_id(), workspace, aws_utils.assume_session())
stacks = pytest.cdk_obj.deploy(deployment_params=deployment_params)
logger.info(f'Cdk stack names:\n{stacks}')
resource_mappings.populate_output_keys(stacks)
pytest.cdk_obj.setup(cdk_path, project, aws_utils.assume_account_id(), workspace, aws_utils.assume_session(),
bootstrap_required)
def teardown(): def teardown():
if destroy_stacks_on_teardown: if destroy_stacks_on_teardown:
pytest.cdk_obj.destroy() pytest.cdk_obj.destroy(deployment_params=deployment_params)
# Enable after https://github.com/aws/aws-cdk/issues/986 is fixed. # Enable after https://github.com/aws/aws-cdk/issues/986 is fixed.
# Until then clean the bootstrap bucket manually. # Until then clean the bootstrap bucket manually.
# cdk_obj.remove_bootstrap_stack() # pytest.cdk_obj.remove_bootstrap_stack()
pytest.cdk_obj = None
request.addfinalizer(teardown) request.addfinalizer(teardown)
return pytest.cdk_obj return pytest.cdk_obj
@pytest.fixture(scope='function') @pytest.fixture(scope='function')
def aws_credentials(request: pytest.fixture, aws_utils: pytest.fixture, profile_name: str): def aws_credentials(request: pytest.fixture, aws_utils: pytest.fixture, profile_name: str):
""" """

@ -1,13 +1,23 @@
ProductName: OneMeshOneMaterial.dbgsg ProductName: OneMeshOneMaterial.dbgsg
debugSceneGraphVersion: 1 debugSceneGraphVersion: 1
OneMeshOneMaterial OneMeshOneMaterial
Node Name: Cube
Node Path: RootNode.Cube Node Path: RootNode.Cube
Node Type: MeshData Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285 Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561 Normals: Count 24. Hash: 5807525742165000561
FaceList: Count 12. Hash: 17730128541777770264 FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7110546404675862471 FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: Cube_optimized
Node Path: RootNode.Cube_optimized
Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561
FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: transform
Node Path: RootNode.Cube.transform Node Path: RootNode.Cube.transform
Node Type: TransformData Node Type: TransformData
Matrix: Matrix:
@ -16,30 +26,110 @@ Node Type: TransformData
BasisZ: < 0.000000, -100.000000, -0.000016> BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000> Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cube.UVMap Node Path: RootNode.Cube.UVMap
Node Type: MeshVertexUVData Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736 UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap UVCustomName: UVMap
Node Name: CubeMaterial
Node Path: RootNode.Cube.CubeMaterial Node Path: RootNode.Cube.CubeMaterial
Node Type: MaterialData Node Type: MaterialData
MaterialName: CubeMaterial MaterialName: CubeMaterial
UniqueId: 40 UniqueId: 973942033197978066
IsNoDraw: false IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000> DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.200000, 0.200000, 0.200000> SpecularColor: < 0.800000, 0.800000, 0.800000>
EmissiveColor: < 0.000000, 0.000000, 0.000000> EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000 Opacity: 1.000000
Shininess: 36.000000 Shininess: 36.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture: OneMeshOneMaterial/FBXTestTexture.png
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture: OneMeshOneMaterial/FBXTestTexture.png
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cube.TangentSet_MikkT_0 Node Path: RootNode.Cube.TangentSet_MikkT_0
Node Type: MeshVertexTangentData Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049 Tangents: Count 24. Hash: 13438447437797057049
TangentSpace: 1 TangentSpace: 1
SetIndex: 0 SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cube.BitangentSet_MikkT_0 Node Path: RootNode.Cube.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017 Bitangents: Count 24. Hash: 11372562338897179017
TangentSpace: 1 TangentSpace: 1
Node Name: UVMap
Node Path: RootNode.Cube_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cube_optimized.TangentSet_MikkT_0
Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049
TangentSpace: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cube_optimized.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017
TangentSpace: 1
Node Name: transform
Node Path: RootNode.Cube_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: CubeMaterial
Node Path: RootNode.Cube_optimized.CubeMaterial
Node Type: MaterialData
MaterialName: CubeMaterial
UniqueId: 973942033197978066
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.800000, 0.800000, 0.800000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 36.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture: OneMeshOneMaterial/FBXTestTexture.png
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture: OneMeshOneMaterial/FBXTestTexture.png

@ -1,20 +1,23 @@
ProductName: lodtest.dbgsg ProductName: lodtest.dbgsg
debugSceneGraphVersion: 1 debugSceneGraphVersion: 1
lodtest lodtest
Node Name: lodtest
Node Path: RootNode.lodtest Node Path: RootNode.lodtest
Node Type: MeshData Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285 Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561 Normals: Count 24. Hash: 5807525742165000561
FaceList: Count 12. Hash: 17730128541777770264 FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7110546404675862471 FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: lodtest_lod3
Node Path: RootNode.lodtest_lod3 Node Path: RootNode.lodtest_lod3
Node Type: MeshData Node Type: MeshData
Positions: Count 1984. Hash: 6600975913707260286 Positions: Count 1984. Hash: 6600975913707260286
Normals: Count 1984. Hash: 2708036977889843831 Normals: Count 1984. Hash: 2708036977889843831
FaceList: Count 960. Hash: 18299150252135919020 FaceList: Count 960. Hash: 10390417165025722786
FaceMaterialIds: Count 960. Hash: 12510609185544665964 FaceMaterialIds: Count 960. Hash: 12510609185544665964
Node Name: lodtest_lod2
Node Path: RootNode.lodtest_lod2 Node Path: RootNode.lodtest_lod2
Node Type: MeshData Node Type: MeshData
Positions: Count 240. Hash: 219362421205407416 Positions: Count 240. Hash: 219362421205407416
@ -22,13 +25,47 @@ Node Type: MeshData
FaceList: Count 80. Hash: 11130917988116538993 FaceList: Count 80. Hash: 11130917988116538993
FaceMaterialIds: Count 80. Hash: 4190892684086530065 FaceMaterialIds: Count 80. Hash: 4190892684086530065
Node Name: lodtest_lod1
Node Path: RootNode.lodtest_lod1 Node Path: RootNode.lodtest_lod1
Node Type: MeshData Node Type: MeshData
Positions: Count 192. Hash: 1283526254311745349 Positions: Count 192. Hash: 1283526254311745349
Normals: Count 192. Hash: 1873340970602844856 Normals: Count 192. Hash: 1873340970602844856
FaceList: Count 124. Hash: 4139150512255795252 FaceList: Count 124. Hash: 3728991722746136013
FaceMaterialIds: Count 124. Hash: 2372486708814455910 FaceMaterialIds: Count 124. Hash: 2372486708814455910
Node Name: lodtest_optimized
Node Path: RootNode.lodtest_optimized
Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561
FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: lodtest_lod3_optimized
Node Path: RootNode.lodtest_lod3_optimized
Node Type: MeshData
Positions: Count 1984. Hash: 6600975913707260286
Normals: Count 1984. Hash: 2708036977889843831
FaceList: Count 960. Hash: 10390417165025722786
FaceMaterialIds: Count 960. Hash: 12510609185544665964
Node Name: lodtest_lod2_optimized
Node Path: RootNode.lodtest_lod2_optimized
Node Type: MeshData
Positions: Count 240. Hash: 219362421205407416
Normals: Count 240. Hash: 11195242321181199939
FaceList: Count 80. Hash: 11130917988116538993
FaceMaterialIds: Count 80. Hash: 4190892684086530065
Node Name: lodtest_lod1_optimized
Node Path: RootNode.lodtest_lod1_optimized
Node Type: MeshData
Positions: Count 192. Hash: 7921557352486854444
Normals: Count 192. Hash: 1873340970602844856
FaceList: Count 124. Hash: 18311637590974204568
FaceMaterialIds: Count 124. Hash: 2372486708814455910
Node Name: transform
Node Path: RootNode.lodtest.transform Node Path: RootNode.lodtest.transform
Node Type: TransformData Node Type: TransformData
Matrix: Matrix:
@ -37,33 +74,56 @@ Node Type: TransformData
BasisZ: < 0.000000, -100.000000, -0.000016> BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000> Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.lodtest.UVMap Node Path: RootNode.lodtest.UVMap
Node Type: MeshVertexUVData Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736 UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap UVCustomName: UVMap
Node Name: Material
Node Path: RootNode.lodtest.Material Node Path: RootNode.lodtest.Material
Node Type: MaterialData Node Type: MaterialData
MaterialName: Material MaterialName: Material
UniqueId: 41 UniqueId: 11127505492038345244
IsNoDraw: false IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000> DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.200000, 0.200000, 0.200000> SpecularColor: < 0.800000, 0.800000, 0.800000>
EmissiveColor: < 0.000000, 0.000000, 0.000000> EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000 Opacity: 1.000000
Shininess: 36.000000 Shininess: 36.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
Node Name: TangentSet_MikkT_0
Node Path: RootNode.lodtest.TangentSet_MikkT_0 Node Path: RootNode.lodtest.TangentSet_MikkT_0
Node Type: MeshVertexTangentData Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049 Tangents: Count 24. Hash: 13438447437797057049
TangentSpace: 1 TangentSpace: 1
SetIndex: 0 SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.lodtest.BitangentSet_MikkT_0 Node Path: RootNode.lodtest.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017 Bitangents: Count 24. Hash: 11372562338897179017
TangentSpace: 1 TangentSpace: 1
Node Name: transform
Node Path: RootNode.lodtest_lod3.transform Node Path: RootNode.lodtest_lod3.transform
Node Type: TransformData Node Type: TransformData
Matrix: Matrix:
@ -72,22 +132,56 @@ Node Type: TransformData
BasisZ: < 0.000000, -100.000000, -0.000016> BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 2.298166, 0.000000> Transl: < 0.000000, 2.298166, 0.000000>
Node Name: UVMap
Node Path: RootNode.lodtest_lod3.UVMap Node Path: RootNode.lodtest_lod3.UVMap
Node Type: MeshVertexUVData Node Type: MeshVertexUVData
UVs: Count 1984. Hash: 14119273880200542497 UVs: Count 1984. Hash: 14119273880200542497
UVCustomName: UVMap UVCustomName: UVMap
Node Name: DefaultMaterial
Node Path: RootNode.lodtest_lod3.DefaultMaterial
Node Type: MaterialData
MaterialName: DefaultMaterial
UniqueId: 3809502407269006983
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.000000, 0.000000, 0.000000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 0.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
Node Name: TangentSet_MikkT_0
Node Path: RootNode.lodtest_lod3.TangentSet_MikkT_0 Node Path: RootNode.lodtest_lod3.TangentSet_MikkT_0
Node Type: MeshVertexTangentData Node Type: MeshVertexTangentData
Tangents: Count 1984. Hash: 18230617734432580484 Tangents: Count 1984. Hash: 5664494957869921957
TangentSpace: 1 TangentSpace: 1
SetIndex: 0 SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.lodtest_lod3.BitangentSet_MikkT_0 Node Path: RootNode.lodtest_lod3.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData Node Type: MeshVertexBitangentData
Bitangents: Count 1984. Hash: 1758062968819667297 Bitangents: Count 1984. Hash: 5048878728906162461
TangentSpace: 1 TangentSpace: 1
Node Name: transform
Node Path: RootNode.lodtest_lod2.transform Node Path: RootNode.lodtest_lod2.transform
Node Type: TransformData Node Type: TransformData
Matrix: Matrix:
@ -96,22 +190,56 @@ Node Type: TransformData
BasisZ: < 0.000000, -100.000000, -0.000016> BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, -2.211498, 0.000000> Transl: < 0.000000, -2.211498, 0.000000>
Node Name: UVMap
Node Path: RootNode.lodtest_lod2.UVMap Node Path: RootNode.lodtest_lod2.UVMap
Node Type: MeshVertexUVData Node Type: MeshVertexUVData
UVs: Count 240. Hash: 13702273589593616598 UVs: Count 240. Hash: 13702273589593616598
UVCustomName: UVMap UVCustomName: UVMap
Node Name: DefaultMaterial
Node Path: RootNode.lodtest_lod2.DefaultMaterial
Node Type: MaterialData
MaterialName: DefaultMaterial
UniqueId: 3809502407269006983
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.000000, 0.000000, 0.000000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 0.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
Node Name: TangentSet_MikkT_0
Node Path: RootNode.lodtest_lod2.TangentSet_MikkT_0 Node Path: RootNode.lodtest_lod2.TangentSet_MikkT_0
Node Type: MeshVertexTangentData Node Type: MeshVertexTangentData
Tangents: Count 240. Hash: 12143450499217075227 Tangents: Count 240. Hash: 1390901212717410749
TangentSpace: 1 TangentSpace: 1
SetIndex: 0 SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.lodtest_lod2.BitangentSet_MikkT_0 Node Path: RootNode.lodtest_lod2.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData Node Type: MeshVertexBitangentData
Bitangents: Count 240. Hash: 2933938440535428567 Bitangents: Count 240. Hash: 1379238632949267281
TangentSpace: 1 TangentSpace: 1
Node Name: transform
Node Path: RootNode.lodtest_lod1.transform Node Path: RootNode.lodtest_lod1.transform
Node Type: TransformData Node Type: TransformData
Matrix: Matrix:
@ -120,19 +248,284 @@ Node Type: TransformData
BasisZ: < 0.000000, -100.000000, -0.000016> BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 2.410331, 0.000000, 0.000000> Transl: < 2.410331, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.lodtest_lod1.UVMap Node Path: RootNode.lodtest_lod1.UVMap
Node Type: MeshVertexUVData Node Type: MeshVertexUVData
UVs: Count 192. Hash: 27253578623892681 UVs: Count 192. Hash: 27253578623892681
UVCustomName: UVMap UVCustomName: UVMap
Node Name: DefaultMaterial
Node Path: RootNode.lodtest_lod1.DefaultMaterial
Node Type: MaterialData
MaterialName: DefaultMaterial
UniqueId: 3809502407269006983
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.000000, 0.000000, 0.000000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 0.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
Node Name: TangentSet_MikkT_0
Node Path: RootNode.lodtest_lod1.TangentSet_MikkT_0 Node Path: RootNode.lodtest_lod1.TangentSet_MikkT_0
Node Type: MeshVertexTangentData Node Type: MeshVertexTangentData
Tangents: Count 192. Hash: 5663634855689915515 Tangents: Count 192. Hash: 11165448242141781141
TangentSpace: 1 TangentSpace: 1
SetIndex: 0 SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.lodtest_lod1.BitangentSet_MikkT_0 Node Path: RootNode.lodtest_lod1.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData Node Type: MeshVertexBitangentData
Bitangents: Count 192. Hash: 10115392016288328891 Bitangents: Count 192. Hash: 7987814487334449536
TangentSpace: 1 TangentSpace: 1
Node Name: UVMap
Node Path: RootNode.lodtest_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap
Node Name: TangentSet_MikkT_0
Node Path: RootNode.lodtest_optimized.TangentSet_MikkT_0
Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049
TangentSpace: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.lodtest_optimized.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017
TangentSpace: 1
Node Name: transform
Node Path: RootNode.lodtest_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: Material
Node Path: RootNode.lodtest_optimized.Material
Node Type: MaterialData
MaterialName: Material
UniqueId: 11127505492038345244
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.800000, 0.800000, 0.800000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 36.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
Node Name: UVMap
Node Path: RootNode.lodtest_lod3_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 1984. Hash: 14119273880200542497
UVCustomName: UVMap
Node Name: TangentSet_MikkT_0
Node Path: RootNode.lodtest_lod3_optimized.TangentSet_MikkT_0
Node Type: MeshVertexTangentData
Tangents: Count 1984. Hash: 5664494957869921957
TangentSpace: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.lodtest_lod3_optimized.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData
Bitangents: Count 1984. Hash: 5048878728906162461
TangentSpace: 1
Node Name: transform
Node Path: RootNode.lodtest_lod3_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 2.298166, 0.000000>
Node Name: DefaultMaterial
Node Path: RootNode.lodtest_lod3_optimized.DefaultMaterial
Node Type: MaterialData
MaterialName: DefaultMaterial
UniqueId: 3809502407269006983
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.000000, 0.000000, 0.000000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 0.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
Node Name: UVMap
Node Path: RootNode.lodtest_lod2_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 240. Hash: 13702273589593616598
UVCustomName: UVMap
Node Name: TangentSet_MikkT_0
Node Path: RootNode.lodtest_lod2_optimized.TangentSet_MikkT_0
Node Type: MeshVertexTangentData
Tangents: Count 240. Hash: 1390901212717410749
TangentSpace: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.lodtest_lod2_optimized.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData
Bitangents: Count 240. Hash: 1379238632949267281
TangentSpace: 1
Node Name: transform
Node Path: RootNode.lodtest_lod2_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, -0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, -2.211498, 0.000000>
Node Name: DefaultMaterial
Node Path: RootNode.lodtest_lod2_optimized.DefaultMaterial
Node Type: MaterialData
MaterialName: DefaultMaterial
UniqueId: 3809502407269006983
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.000000, 0.000000, 0.000000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 0.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
Node Name: UVMap
Node Path: RootNode.lodtest_lod1_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 192. Hash: 13790301632763350589
UVCustomName: UVMap
Node Name: TangentSet_MikkT_0
Node Path: RootNode.lodtest_lod1_optimized.TangentSet_MikkT_0
Node Type: MeshVertexTangentData
Tangents: Count 192. Hash: 7293001660047850407
TangentSpace: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.lodtest_lod1_optimized.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData
Bitangents: Count 192. Hash: 2874689498270494796
TangentSpace: 1
Node Name: transform
Node Path: RootNode.lodtest_lod1_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 2.410331, 0.000000, 0.000000>
Node Name: DefaultMaterial
Node Path: RootNode.lodtest_lod1_optimized.DefaultMaterial
Node Type: MaterialData
MaterialName: DefaultMaterial
UniqueId: 3809502407269006983
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.000000, 0.000000, 0.000000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 0.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:

@ -1,20 +1,31 @@
ProductName: physicstest.dbgsg ProductName: physicstest.dbgsg
debugSceneGraphVersion: 1 debugSceneGraphVersion: 1
physicstest physicstest
Node Name: Cone
Node Path: RootNode.Cone Node Path: RootNode.Cone
Node Type: MeshData Node Type: MeshData
Positions: Count 128. Hash: 7714223793259938211 Positions: Count 128. Hash: 7714223793259938211
Normals: Count 128. Hash: 2352668179264002707 Normals: Count 128. Hash: 2352668179264002707
FaceList: Count 62. Hash: 501739282148426083 FaceList: Count 62. Hash: 14563017593520122982
FaceMaterialIds: Count 62. Hash: 12234218120113875284 FaceMaterialIds: Count 62. Hash: 12234218120113875284
Node Name: Cube_phys
Node Path: RootNode.Cube_phys Node Path: RootNode.Cube_phys
Node Type: MeshData Node Type: MeshData
Positions: Count 24. Hash: 3478903613105670818 Positions: Count 24. Hash: 3478903613105670818
Normals: Count 24. Hash: 7251512570672401149 Normals: Count 24. Hash: 7251512570672401149
FaceList: Count 12. Hash: 17730128541777770264 FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7110546404675862471 FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: Cone_optimized
Node Path: RootNode.Cone_optimized
Node Type: MeshData
Positions: Count 128. Hash: 10174710861731544050
Normals: Count 128. Hash: 2352668179264002707
FaceList: Count 62. Hash: 11332459830831720586
FaceMaterialIds: Count 62. Hash: 12234218120113875284
Node Name: transform
Node Path: RootNode.Cone.transform Node Path: RootNode.Cone.transform
Node Type: TransformData Node Type: TransformData
Matrix: Matrix:
@ -23,22 +34,56 @@ Node Type: TransformData
BasisZ: < 0.000000, -100.000000, -0.000016> BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000> Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cone.UVMap Node Path: RootNode.Cone.UVMap
Node Type: MeshVertexUVData Node Type: MeshVertexUVData
UVs: Count 128. Hash: 10171083346831193808 UVs: Count 128. Hash: 10171083346831193808
UVCustomName: UVMap UVCustomName: UVMap
Node Name: DefaultMaterial
Node Path: RootNode.Cone.DefaultMaterial
Node Type: MaterialData
MaterialName: DefaultMaterial
UniqueId: 3809502407269006983
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.000000, 0.000000, 0.000000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 0.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cone.TangentSet_MikkT_0 Node Path: RootNode.Cone.TangentSet_MikkT_0
Node Type: MeshVertexTangentData Node Type: MeshVertexTangentData
Tangents: Count 128. Hash: 7061767882345696031 Tangents: Count 128. Hash: 14351734474754285313
TangentSpace: 1 TangentSpace: 1
SetIndex: 0 SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cone.BitangentSet_MikkT_0 Node Path: RootNode.Cone.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData Node Type: MeshVertexBitangentData
Bitangents: Count 128. Hash: 12648628819656324550 Bitangents: Count 128. Hash: 15997251922861304891
TangentSpace: 1 TangentSpace: 1
Node Name: transform
Node Path: RootNode.Cube_phys.transform Node Path: RootNode.Cube_phys.transform
Node Type: TransformData Node Type: TransformData
Matrix: Matrix:
@ -47,19 +92,110 @@ Node Type: TransformData
BasisZ: < 0.000000, -100.000000, -0.000016> BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000> Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cube_phys.UVMap Node Path: RootNode.Cube_phys.UVMap
Node Type: MeshVertexUVData Node Type: MeshVertexUVData
UVs: Count 24. Hash: 13623018071435219250 UVs: Count 24. Hash: 13623018071435219250
UVCustomName: UVMap UVCustomName: UVMap
Node Name: DefaultMaterial
Node Path: RootNode.Cube_phys.DefaultMaterial
Node Type: MaterialData
MaterialName: DefaultMaterial
UniqueId: 3809502407269006983
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.000000, 0.000000, 0.000000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 0.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cube_phys.TangentSet_MikkT_0 Node Path: RootNode.Cube_phys.TangentSet_MikkT_0
Node Type: MeshVertexTangentData Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 11965897353301448436 Tangents: Count 24. Hash: 11965897353301448436
TangentSpace: 1 TangentSpace: 1
SetIndex: 0 SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cube_phys.BitangentSet_MikkT_0 Node Path: RootNode.Cube_phys.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 17515781720544086759 Bitangents: Count 24. Hash: 17515781720544086759
TangentSpace: 1 TangentSpace: 1
Node Name: UVMap
Node Path: RootNode.Cone_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 128. Hash: 7873368003484215433
UVCustomName: UVMap
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cone_optimized.TangentSet_MikkT_0
Node Type: MeshVertexTangentData
Tangents: Count 128. Hash: 12937806066914201637
TangentSpace: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cone_optimized.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData
Bitangents: Count 128. Hash: 873786942732834087
TangentSpace: 1
Node Name: transform
Node Path: RootNode.Cone_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: DefaultMaterial
Node Path: RootNode.Cone_optimized.DefaultMaterial
Node Type: MaterialData
MaterialName: DefaultMaterial
UniqueId: 3809502407269006983
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.000000, 0.000000, 0.000000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 0.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture:
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture:

@ -5,788 +5,32 @@ Node Name: Cube
Node Path: RootNode.Cube Node Path: RootNode.Cube
Node Type: MeshData Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285 Positions: Count 24. Hash: 8661923109306356285
0: <-0.010000, 0.010000, 0.010000>
1: < 0.010000, 0.010000, 0.010000>
2: < 0.010000, 0.010000, -0.010000>
3: <-0.010000, 0.010000, -0.010000>
4: <-0.010000, -0.010000, -0.010000>
5: <-0.010000, 0.010000, -0.010000>
6: < 0.010000, 0.010000, -0.010000>
7: < 0.010000, -0.010000, -0.010000>
8: < 0.010000, -0.010000, -0.010000>
9: < 0.010000, 0.010000, -0.010000>
10: < 0.010000, 0.010000, 0.010000>
11: < 0.010000, -0.010000, 0.010000>
12: < 0.010000, -0.010000, 0.010000>
13: <-0.010000, -0.010000, 0.010000>
14: <-0.010000, -0.010000, -0.010000>
15: < 0.010000, -0.010000, -0.010000>
16: <-0.010000, -0.010000, 0.010000>
17: <-0.010000, 0.010000, 0.010000>
18: <-0.010000, 0.010000, -0.010000>
19: <-0.010000, -0.010000, -0.010000>
20: < 0.010000, -0.010000, 0.010000>
21: < 0.010000, 0.010000, 0.010000>
22: <-0.010000, 0.010000, 0.010000>
23: <-0.010000, -0.010000, 0.010000>
Normals: Count 24. Hash: 5807525742165000561 Normals: Count 24. Hash: 5807525742165000561
0: < 0.000000, 1.000000, 0.000000>
1: < 0.000000, 1.000000, 0.000000>
2: < 0.000000, 1.000000, 0.000000>
3: < 0.000000, 1.000000, 0.000000>
4: < 0.000000, 0.000000, -1.000000>
5: < 0.000000, 0.000000, -1.000000>
6: < 0.000000, 0.000000, -1.000000>
7: < 0.000000, 0.000000, -1.000000>
8: < 1.000000, 0.000000, 0.000000>
9: < 1.000000, 0.000000, 0.000000>
10: < 1.000000, 0.000000, 0.000000>
11: < 1.000000, 0.000000, 0.000000>
12: < 0.000000, -1.000000, 0.000000>
13: < 0.000000, -1.000000, 0.000000>
14: < 0.000000, -1.000000, 0.000000>
15: < 0.000000, -1.000000, 0.000000>
16: <-1.000000, 0.000000, 0.000000>
17: <-1.000000, 0.000000, 0.000000>
18: <-1.000000, 0.000000, 0.000000>
19: <-1.000000, 0.000000, 0.000000>
20: < 0.000000, 0.000000, 1.000000>
21: < 0.000000, 0.000000, 1.000000>
22: < 0.000000, 0.000000, 1.000000>
23: < 0.000000, 0.000000, 1.000000>
FaceList: Count 12. Hash: 9888799799190757436 FaceList: Count 12. Hash: 9888799799190757436
0: 0, 1, 2,
1: 0, 2, 3,
2: 4, 5, 6,
3: 4, 6, 7,
4: 8, 9, 10,
5: 8, 10, 11,
6: 12, 13, 14,
7: 12, 14, 15,
8: 16, 17, 18,
9: 16, 18, 19,
10: 20, 21, 22,
11: 20, 22, 23,
FaceMaterialIds: Count 12. Hash: 7113802799051126666 FaceMaterialIds: Count 12. Hash: 7113802799051126666
Node Name: Cone Node Name: Cone
Node Path: RootNode.Cone Node Path: RootNode.Cone
Node Type: MeshData Node Type: MeshData
Positions: Count 128. Hash: 12506421592104186200 Positions: Count 128. Hash: 12506421592104186200
0: < 0.000000, -0.010000, 0.010000>
1: < 0.000000, 0.010000, 0.000000>
2: <-0.001951, -0.010000, 0.009808>
3: <-0.001951, -0.010000, 0.009808>
4: < 0.000000, 0.010000, 0.000000>
5: <-0.003827, -0.010000, 0.009239>
6: <-0.003827, -0.010000, 0.009239>
7: < 0.000000, 0.010000, 0.000000>
8: <-0.005556, -0.010000, 0.008315>
9: <-0.005556, -0.010000, 0.008315>
10: < 0.000000, 0.010000, 0.000000>
11: <-0.007071, -0.010000, 0.007071>
12: <-0.007071, -0.010000, 0.007071>
13: < 0.000000, 0.010000, 0.000000>
14: <-0.008315, -0.010000, 0.005556>
15: <-0.008315, -0.010000, 0.005556>
16: < 0.000000, 0.010000, 0.000000>
17: <-0.009239, -0.010000, 0.003827>
18: <-0.009239, -0.010000, 0.003827>
19: < 0.000000, 0.010000, 0.000000>
20: <-0.009808, -0.010000, 0.001951>
21: < 0.009808, -0.010000, 0.001951>
22: < 0.000000, 0.010000, 0.000000>
23: < 0.009239, -0.010000, 0.003827>
24: < 0.009239, -0.010000, 0.003827>
25: < 0.000000, 0.010000, 0.000000>
26: < 0.008315, -0.010000, 0.005556>
27: < 0.008315, -0.010000, 0.005556>
28: < 0.000000, 0.010000, 0.000000>
29: < 0.007071, -0.010000, 0.007071>
30: < 0.007071, -0.010000, 0.007071>
31: < 0.000000, 0.010000, 0.000000>
32: < 0.005556, -0.010000, 0.008315>
33: < 0.005556, -0.010000, 0.008315>
34: < 0.000000, 0.010000, 0.000000>
35: < 0.003827, -0.010000, 0.009239>
36: < 0.000000, -0.010000, 0.010000>
37: <-0.001951, -0.010000, 0.009808>
38: <-0.003827, -0.010000, 0.009239>
39: <-0.005556, -0.010000, 0.008315>
40: <-0.007071, -0.010000, 0.007071>
41: <-0.008315, -0.010000, 0.005556>
42: <-0.009239, -0.010000, 0.003827>
43: <-0.009808, -0.010000, 0.001951>
44: <-0.010000, -0.010000, 0.000000>
45: <-0.009808, -0.010000, -0.001951>
46: <-0.009239, -0.010000, -0.003827>
47: <-0.008315, -0.010000, -0.005556>
48: <-0.007071, -0.010000, -0.007071>
49: <-0.005556, -0.010000, -0.008315>
50: <-0.003827, -0.010000, -0.009239>
51: <-0.001951, -0.010000, -0.009808>
52: < 0.000000, -0.010000, -0.010000>
53: < 0.001951, -0.010000, -0.009808>
54: < 0.003827, -0.010000, -0.009239>
55: < 0.005556, -0.010000, -0.008315>
56: < 0.007071, -0.010000, -0.007071>
57: < 0.008315, -0.010000, -0.005556>
58: < 0.009239, -0.010000, -0.003827>
59: < 0.009808, -0.010000, -0.001951>
60: < 0.010000, -0.010000, 0.000000>
61: < 0.009808, -0.010000, 0.001951>
62: < 0.009239, -0.010000, 0.003827>
63: < 0.008315, -0.010000, 0.005556>
64: < 0.007071, -0.010000, 0.007071>
65: < 0.005556, -0.010000, 0.008315>
66: < 0.003827, -0.010000, 0.009239>
67: < 0.001951, -0.010000, 0.009808>
68: < 0.003827, -0.010000, 0.009239>
69: < 0.000000, 0.010000, 0.000000>
70: < 0.001951, -0.010000, 0.009808>
71: < 0.001951, -0.010000, 0.009808>
72: < 0.000000, 0.010000, 0.000000>
73: < 0.000000, -0.010000, 0.010000>
74: <-0.009808, -0.010000, 0.001951>
75: < 0.000000, 0.010000, 0.000000>
76: <-0.010000, -0.010000, 0.000000>
77: <-0.010000, -0.010000, 0.000000>
78: < 0.000000, 0.010000, 0.000000>
79: <-0.009808, -0.010000, -0.001951>
80: <-0.009808, -0.010000, -0.001951>
81: < 0.000000, 0.010000, 0.000000>
82: <-0.009239, -0.010000, -0.003827>
83: <-0.009239, -0.010000, -0.003827>
84: < 0.000000, 0.010000, 0.000000>
85: <-0.008315, -0.010000, -0.005556>
86: <-0.008315, -0.010000, -0.005556>
87: < 0.000000, 0.010000, 0.000000>
88: <-0.007071, -0.010000, -0.007071>
89: <-0.007071, -0.010000, -0.007071>
90: < 0.000000, 0.010000, 0.000000>
91: <-0.005556, -0.010000, -0.008315>
92: <-0.005556, -0.010000, -0.008315>
93: < 0.000000, 0.010000, 0.000000>
94: <-0.003827, -0.010000, -0.009239>
95: <-0.003827, -0.010000, -0.009239>
96: < 0.000000, 0.010000, 0.000000>
97: <-0.001951, -0.010000, -0.009808>
98: <-0.001951, -0.010000, -0.009808>
99: < 0.000000, 0.010000, 0.000000>
100: < 0.000000, -0.010000, -0.010000>
101: < 0.000000, -0.010000, -0.010000>
102: < 0.000000, 0.010000, 0.000000>
103: < 0.001951, -0.010000, -0.009808>
104: < 0.001951, -0.010000, -0.009808>
105: < 0.000000, 0.010000, 0.000000>
106: < 0.003827, -0.010000, -0.009239>
107: < 0.003827, -0.010000, -0.009239>
108: < 0.000000, 0.010000, 0.000000>
109: < 0.005556, -0.010000, -0.008315>
110: < 0.005556, -0.010000, -0.008315>
111: < 0.000000, 0.010000, 0.000000>
112: < 0.007071, -0.010000, -0.007071>
113: < 0.007071, -0.010000, -0.007071>
114: < 0.000000, 0.010000, 0.000000>
115: < 0.008315, -0.010000, -0.005556>
116: < 0.008315, -0.010000, -0.005556>
117: < 0.000000, 0.010000, 0.000000>
118: < 0.009239, -0.010000, -0.003827>
119: < 0.009239, -0.010000, -0.003827>
120: < 0.000000, 0.010000, 0.000000>
121: < 0.009808, -0.010000, -0.001951>
122: < 0.009808, -0.010000, -0.001951>
123: < 0.000000, 0.010000, 0.000000>
124: < 0.010000, -0.010000, 0.000000>
125: < 0.010000, -0.010000, 0.000000>
126: < 0.000000, 0.010000, 0.000000>
127: < 0.009808, -0.010000, 0.001951>
Normals: Count 128. Hash: 367461522682321485 Normals: Count 128. Hash: 367461522682321485
0: <-0.087754, 0.445488, 0.890977>
1: <-0.087754, 0.445488, 0.890977>
2: <-0.087754, 0.445488, 0.890977>
3: <-0.259888, 0.445488, 0.856737>
4: <-0.259888, 0.445488, 0.856737>
5: <-0.259888, 0.445488, 0.856737>
6: <-0.422036, 0.445488, 0.789573>
7: <-0.422036, 0.445488, 0.789573>
8: <-0.422036, 0.445488, 0.789573>
9: <-0.567965, 0.445488, 0.692067>
10: <-0.567965, 0.445488, 0.692067>
11: <-0.567965, 0.445488, 0.692067>
12: <-0.692067, 0.445488, 0.567965>
13: <-0.692067, 0.445488, 0.567965>
14: <-0.692067, 0.445488, 0.567965>
15: <-0.789573, 0.445488, 0.422036>
16: <-0.789573, 0.445488, 0.422036>
17: <-0.789573, 0.445488, 0.422036>
18: <-0.856737, 0.445488, 0.259888>
19: <-0.856737, 0.445488, 0.259888>
20: <-0.856737, 0.445488, 0.259888>
21: < 0.856737, 0.445488, 0.259889>
22: < 0.856737, 0.445488, 0.259889>
23: < 0.856737, 0.445488, 0.259889>
24: < 0.789573, 0.445488, 0.422037>
25: < 0.789573, 0.445488, 0.422037>
26: < 0.789573, 0.445488, 0.422037>
27: < 0.692066, 0.445488, 0.567966>
28: < 0.692066, 0.445488, 0.567966>
29: < 0.692066, 0.445488, 0.567966>
30: < 0.567964, 0.445488, 0.692067>
31: < 0.567964, 0.445488, 0.692067>
32: < 0.567964, 0.445488, 0.692067>
33: < 0.422035, 0.445488, 0.789574>
34: < 0.422035, 0.445488, 0.789574>
35: < 0.422035, 0.445488, 0.789574>
36: <-0.000000, -1.000000, 0.000000>
37: <-0.000000, -1.000000, 0.000000>
38: <-0.000000, -1.000000, 0.000000>
39: <-0.000000, -1.000000, 0.000000>
40: <-0.000000, -1.000000, 0.000000>
41: <-0.000000, -1.000000, 0.000000>
42: <-0.000000, -1.000000, 0.000000>
43: <-0.000000, -1.000000, 0.000000>
44: <-0.000000, -1.000000, 0.000000>
45: <-0.000000, -1.000000, 0.000000>
46: <-0.000000, -1.000000, 0.000000>
47: <-0.000000, -1.000000, 0.000000>
48: <-0.000000, -1.000000, 0.000000>
49: <-0.000000, -1.000000, 0.000000>
50: <-0.000000, -1.000000, 0.000000>
51: <-0.000000, -1.000000, 0.000000>
52: <-0.000000, -1.000000, 0.000000>
53: <-0.000000, -1.000000, 0.000000>
54: <-0.000000, -1.000000, 0.000000>
55: <-0.000000, -1.000000, 0.000000>
56: <-0.000000, -1.000000, 0.000000>
57: <-0.000000, -1.000000, 0.000000>
58: <-0.000000, -1.000000, 0.000000>
59: <-0.000000, -1.000000, 0.000000>
60: <-0.000000, -1.000000, 0.000000>
61: <-0.000000, -1.000000, 0.000000>
62: <-0.000000, -1.000000, 0.000000>
63: <-0.000000, -1.000000, 0.000000>
64: <-0.000000, -1.000000, 0.000000>
65: <-0.000000, -1.000000, 0.000000>
66: <-0.000000, -1.000000, 0.000000>
67: <-0.000000, -1.000000, 0.000000>
68: < 0.259887, 0.445488, 0.856737>
69: < 0.259887, 0.445488, 0.856737>
70: < 0.259887, 0.445488, 0.856737>
71: < 0.087753, 0.445488, 0.890977>
72: < 0.087753, 0.445488, 0.890977>
73: < 0.087753, 0.445488, 0.890977>
74: <-0.890977, 0.445488, 0.087754>
75: <-0.890977, 0.445488, 0.087754>
76: <-0.890977, 0.445488, 0.087754>
77: <-0.890977, 0.445488, -0.087753>
78: <-0.890977, 0.445488, -0.087753>
79: <-0.890977, 0.445488, -0.087753>
80: <-0.856737, 0.445488, -0.259888>
81: <-0.856737, 0.445488, -0.259888>
82: <-0.856737, 0.445488, -0.259888>
83: <-0.789573, 0.445488, -0.422035>
84: <-0.789573, 0.445488, -0.422035>
85: <-0.789573, 0.445488, -0.422035>
86: <-0.692067, 0.445488, -0.567965>
87: <-0.692067, 0.445488, -0.567965>
88: <-0.692067, 0.445488, -0.567965>
89: <-0.567965, 0.445488, -0.692067>
90: <-0.567965, 0.445488, -0.692067>
91: <-0.567965, 0.445488, -0.692067>
92: <-0.422036, 0.445488, -0.789573>
93: <-0.422036, 0.445488, -0.789573>
94: <-0.422036, 0.445488, -0.789573>
95: <-0.259888, 0.445488, -0.856737>
96: <-0.259888, 0.445488, -0.856737>
97: <-0.259888, 0.445488, -0.856737>
98: <-0.087753, 0.445488, -0.890977>
99: <-0.087753, 0.445488, -0.890977>
100: <-0.087753, 0.445488, -0.890977>
101: < 0.087754, 0.445488, -0.890977>
102: < 0.087754, 0.445488, -0.890977>
103: < 0.087754, 0.445488, -0.890977>
104: < 0.259889, 0.445488, -0.856737>
105: < 0.259889, 0.445488, -0.856737>
106: < 0.259889, 0.445488, -0.856737>
107: < 0.422036, 0.445488, -0.789573>
108: < 0.422036, 0.445488, -0.789573>
109: < 0.422036, 0.445488, -0.789573>
110: < 0.567965, 0.445488, -0.692066>
111: < 0.567965, 0.445488, -0.692066>
112: < 0.567965, 0.445488, -0.692066>
113: < 0.692067, 0.445488, -0.567964>
114: < 0.692067, 0.445488, -0.567964>
115: < 0.692067, 0.445488, -0.567964>
116: < 0.789574, 0.445488, -0.422035>
117: < 0.789574, 0.445488, -0.422035>
118: < 0.789574, 0.445488, -0.422035>
119: < 0.856737, 0.445488, -0.259887>
120: < 0.856737, 0.445488, -0.259887>
121: < 0.856737, 0.445488, -0.259887>
122: < 0.890977, 0.445488, -0.087753>
123: < 0.890977, 0.445488, -0.087753>
124: < 0.890977, 0.445488, -0.087753>
125: < 0.890977, 0.445488, 0.087754>
126: < 0.890977, 0.445488, 0.087754>
127: < 0.890977, 0.445488, 0.087754>
FaceList: Count 62. Hash: 13208951979626973193 FaceList: Count 62. Hash: 13208951979626973193
0: 0, 1, 2,
1: 3, 4, 5,
2: 6, 7, 8,
3: 9, 10, 11,
4: 12, 13, 14,
5: 15, 16, 17,
6: 18, 19, 20,
7: 21, 22, 23,
8: 24, 25, 26,
9: 27, 28, 29,
10: 30, 31, 32,
11: 33, 34, 35,
12: 67, 36, 37,
13: 67, 37, 38,
14: 67, 38, 39,
15: 67, 39, 40,
16: 67, 40, 41,
17: 67, 41, 42,
18: 67, 42, 43,
19: 67, 43, 44,
20: 67, 44, 45,
21: 67, 45, 46,
22: 67, 46, 47,
23: 67, 47, 48,
24: 67, 48, 49,
25: 67, 49, 50,
26: 67, 50, 51,
27: 67, 51, 52,
28: 67, 52, 53,
29: 67, 53, 54,
30: 67, 54, 55,
31: 67, 55, 56,
32: 67, 56, 57,
33: 67, 57, 58,
34: 67, 58, 59,
35: 67, 59, 60,
36: 67, 60, 61,
37: 67, 61, 62,
38: 67, 62, 63,
39: 67, 63, 64,
40: 67, 64, 65,
41: 65, 66, 67,
42: 68, 69, 70,
43: 71, 72, 73,
44: 74, 75, 76,
45: 77, 78, 79,
46: 80, 81, 82,
47: 83, 84, 85,
48: 86, 87, 88,
49: 89, 90, 91,
50: 92, 93, 94,
51: 95, 96, 97,
52: 98, 99, 100,
53: 101, 102, 103,
54: 104, 105, 106,
55: 107, 108, 109,
56: 110, 111, 112,
57: 113, 114, 115,
58: 116, 117, 118,
59: 119, 120, 121,
60: 122, 123, 124,
61: 125, 126, 127,
FaceMaterialIds: Count 62. Hash: 15454348664434923102 FaceMaterialIds: Count 62. Hash: 15454348664434923102
Node Name: Cube_optimized Node Name: Cube_optimized
Node Path: RootNode.Cube_optimized Node Path: RootNode.Cube_optimized
Node Type: MeshData Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285 Positions: Count 24. Hash: 8661923109306356285
0: <-0.010000, 0.010000, 0.010000>
1: < 0.010000, 0.010000, 0.010000>
2: < 0.010000, 0.010000, -0.010000>
3: <-0.010000, 0.010000, -0.010000>
4: <-0.010000, -0.010000, -0.010000>
5: <-0.010000, 0.010000, -0.010000>
6: < 0.010000, 0.010000, -0.010000>
7: < 0.010000, -0.010000, -0.010000>
8: < 0.010000, -0.010000, -0.010000>
9: < 0.010000, 0.010000, -0.010000>
10: < 0.010000, 0.010000, 0.010000>
11: < 0.010000, -0.010000, 0.010000>
12: < 0.010000, -0.010000, 0.010000>
13: <-0.010000, -0.010000, 0.010000>
14: <-0.010000, -0.010000, -0.010000>
15: < 0.010000, -0.010000, -0.010000>
16: <-0.010000, -0.010000, 0.010000>
17: <-0.010000, 0.010000, 0.010000>
18: <-0.010000, 0.010000, -0.010000>
19: <-0.010000, -0.010000, -0.010000>
20: < 0.010000, -0.010000, 0.010000>
21: < 0.010000, 0.010000, 0.010000>
22: <-0.010000, 0.010000, 0.010000>
23: <-0.010000, -0.010000, 0.010000>
Normals: Count 24. Hash: 5807525742165000561 Normals: Count 24. Hash: 5807525742165000561
0: < 0.000000, 1.000000, 0.000000>
1: < 0.000000, 1.000000, 0.000000>
2: < 0.000000, 1.000000, 0.000000>
3: < 0.000000, 1.000000, 0.000000>
4: < 0.000000, 0.000000, -1.000000>
5: < 0.000000, 0.000000, -1.000000>
6: < 0.000000, 0.000000, -1.000000>
7: < 0.000000, 0.000000, -1.000000>
8: < 1.000000, 0.000000, 0.000000>
9: < 1.000000, 0.000000, 0.000000>
10: < 1.000000, 0.000000, 0.000000>
11: < 1.000000, 0.000000, 0.000000>
12: < 0.000000, -1.000000, 0.000000>
13: < 0.000000, -1.000000, 0.000000>
14: < 0.000000, -1.000000, 0.000000>
15: < 0.000000, -1.000000, 0.000000>
16: <-1.000000, 0.000000, 0.000000>
17: <-1.000000, 0.000000, 0.000000>
18: <-1.000000, 0.000000, 0.000000>
19: <-1.000000, 0.000000, 0.000000>
20: < 0.000000, 0.000000, 1.000000>
21: < 0.000000, 0.000000, 1.000000>
22: < 0.000000, 0.000000, 1.000000>
23: < 0.000000, 0.000000, 1.000000>
FaceList: Count 12. Hash: 9888799799190757436 FaceList: Count 12. Hash: 9888799799190757436
0: 0, 1, 2,
1: 0, 2, 3,
2: 4, 5, 6,
3: 4, 6, 7,
4: 8, 9, 10,
5: 8, 10, 11,
6: 12, 13, 14,
7: 12, 14, 15,
8: 16, 17, 18,
9: 16, 18, 19,
10: 20, 21, 22,
11: 20, 22, 23,
FaceMaterialIds: Count 12. Hash: 7113802799051126666 FaceMaterialIds: Count 12. Hash: 7113802799051126666
Node Name: Cone_optimized Node Name: Cone_optimized
Node Path: RootNode.Cone_optimized Node Path: RootNode.Cone_optimized
Node Type: MeshData Node Type: MeshData
Positions: Count 128. Hash: 14946490408303214595 Positions: Count 128. Hash: 14946490408303214595
0: < 0.000000, -0.010000, 0.010000>
1: < 0.000000, 0.010000, 0.000000>
2: <-0.001951, -0.010000, 0.009808>
3: <-0.001951, -0.010000, 0.009808>
4: < 0.000000, 0.010000, 0.000000>
5: <-0.003827, -0.010000, 0.009239>
6: <-0.003827, -0.010000, 0.009239>
7: < 0.000000, 0.010000, 0.000000>
8: <-0.005556, -0.010000, 0.008315>
9: <-0.005556, -0.010000, 0.008315>
10: < 0.000000, 0.010000, 0.000000>
11: <-0.007071, -0.010000, 0.007071>
12: <-0.007071, -0.010000, 0.007071>
13: < 0.000000, 0.010000, 0.000000>
14: <-0.008315, -0.010000, 0.005556>
15: <-0.008315, -0.010000, 0.005556>
16: < 0.000000, 0.010000, 0.000000>
17: <-0.009239, -0.010000, 0.003827>
18: <-0.009239, -0.010000, 0.003827>
19: < 0.000000, 0.010000, 0.000000>
20: <-0.009808, -0.010000, 0.001951>
21: < 0.009808, -0.010000, 0.001951>
22: < 0.000000, 0.010000, 0.000000>
23: < 0.009239, -0.010000, 0.003827>
24: < 0.009239, -0.010000, 0.003827>
25: < 0.000000, 0.010000, 0.000000>
26: < 0.008315, -0.010000, 0.005556>
27: < 0.008315, -0.010000, 0.005556>
28: < 0.000000, 0.010000, 0.000000>
29: < 0.007071, -0.010000, 0.007071>
30: < 0.007071, -0.010000, 0.007071>
31: < 0.000000, 0.010000, 0.000000>
32: < 0.005556, -0.010000, 0.008315>
33: < 0.005556, -0.010000, 0.008315>
34: < 0.000000, 0.010000, 0.000000>
35: < 0.003827, -0.010000, 0.009239>
36: < 0.001951, -0.010000, 0.009808>
37: < 0.000000, -0.010000, 0.010000>
38: <-0.001951, -0.010000, 0.009808>
39: <-0.003827, -0.010000, 0.009239>
40: <-0.005556, -0.010000, 0.008315>
41: <-0.007071, -0.010000, 0.007071>
42: <-0.008315, -0.010000, 0.005556>
43: <-0.009239, -0.010000, 0.003827>
44: <-0.009808, -0.010000, 0.001951>
45: <-0.010000, -0.010000, 0.000000>
46: <-0.009808, -0.010000, -0.001951>
47: <-0.009239, -0.010000, -0.003827>
48: <-0.008315, -0.010000, -0.005556>
49: <-0.007071, -0.010000, -0.007071>
50: <-0.005556, -0.010000, -0.008315>
51: <-0.003827, -0.010000, -0.009239>
52: <-0.001951, -0.010000, -0.009808>
53: < 0.000000, -0.010000, -0.010000>
54: < 0.001951, -0.010000, -0.009808>
55: < 0.003827, -0.010000, -0.009239>
56: < 0.005556, -0.010000, -0.008315>
57: < 0.007071, -0.010000, -0.007071>
58: < 0.008315, -0.010000, -0.005556>
59: < 0.009239, -0.010000, -0.003827>
60: < 0.009808, -0.010000, -0.001951>
61: < 0.010000, -0.010000, 0.000000>
62: < 0.009808, -0.010000, 0.001951>
63: < 0.009239, -0.010000, 0.003827>
64: < 0.008315, -0.010000, 0.005556>
65: < 0.007071, -0.010000, 0.007071>
66: < 0.005556, -0.010000, 0.008315>
67: < 0.003827, -0.010000, 0.009239>
68: < 0.003827, -0.010000, 0.009239>
69: < 0.000000, 0.010000, 0.000000>
70: < 0.001951, -0.010000, 0.009808>
71: < 0.001951, -0.010000, 0.009808>
72: < 0.000000, 0.010000, 0.000000>
73: < 0.000000, -0.010000, 0.010000>
74: <-0.009808, -0.010000, 0.001951>
75: < 0.000000, 0.010000, 0.000000>
76: <-0.010000, -0.010000, 0.000000>
77: <-0.010000, -0.010000, 0.000000>
78: < 0.000000, 0.010000, 0.000000>
79: <-0.009808, -0.010000, -0.001951>
80: <-0.009808, -0.010000, -0.001951>
81: < 0.000000, 0.010000, 0.000000>
82: <-0.009239, -0.010000, -0.003827>
83: <-0.009239, -0.010000, -0.003827>
84: < 0.000000, 0.010000, 0.000000>
85: <-0.008315, -0.010000, -0.005556>
86: <-0.008315, -0.010000, -0.005556>
87: < 0.000000, 0.010000, 0.000000>
88: <-0.007071, -0.010000, -0.007071>
89: <-0.007071, -0.010000, -0.007071>
90: < 0.000000, 0.010000, 0.000000>
91: <-0.005556, -0.010000, -0.008315>
92: <-0.005556, -0.010000, -0.008315>
93: < 0.000000, 0.010000, 0.000000>
94: <-0.003827, -0.010000, -0.009239>
95: <-0.003827, -0.010000, -0.009239>
96: < 0.000000, 0.010000, 0.000000>
97: <-0.001951, -0.010000, -0.009808>
98: <-0.001951, -0.010000, -0.009808>
99: < 0.000000, 0.010000, 0.000000>
100: < 0.000000, -0.010000, -0.010000>
101: < 0.000000, -0.010000, -0.010000>
102: < 0.000000, 0.010000, 0.000000>
103: < 0.001951, -0.010000, -0.009808>
104: < 0.001951, -0.010000, -0.009808>
105: < 0.000000, 0.010000, 0.000000>
106: < 0.003827, -0.010000, -0.009239>
107: < 0.003827, -0.010000, -0.009239>
108: < 0.000000, 0.010000, 0.000000>
109: < 0.005556, -0.010000, -0.008315>
110: < 0.005556, -0.010000, -0.008315>
111: < 0.000000, 0.010000, 0.000000>
112: < 0.007071, -0.010000, -0.007071>
113: < 0.007071, -0.010000, -0.007071>
114: < 0.000000, 0.010000, 0.000000>
115: < 0.008315, -0.010000, -0.005556>
116: < 0.008315, -0.010000, -0.005556>
117: < 0.000000, 0.010000, 0.000000>
118: < 0.009239, -0.010000, -0.003827>
119: < 0.009239, -0.010000, -0.003827>
120: < 0.000000, 0.010000, 0.000000>
121: < 0.009808, -0.010000, -0.001951>
122: < 0.009808, -0.010000, -0.001951>
123: < 0.000000, 0.010000, 0.000000>
124: < 0.010000, -0.010000, 0.000000>
125: < 0.010000, -0.010000, 0.000000>
126: < 0.000000, 0.010000, 0.000000>
127: < 0.009808, -0.010000, 0.001951>
Normals: Count 128. Hash: 367461522682321485 Normals: Count 128. Hash: 367461522682321485
0: <-0.087754, 0.445488, 0.890977>
1: <-0.087754, 0.445488, 0.890977>
2: <-0.087754, 0.445488, 0.890977>
3: <-0.259888, 0.445488, 0.856737>
4: <-0.259888, 0.445488, 0.856737>
5: <-0.259888, 0.445488, 0.856737>
6: <-0.422036, 0.445488, 0.789573>
7: <-0.422036, 0.445488, 0.789573>
8: <-0.422036, 0.445488, 0.789573>
9: <-0.567965, 0.445488, 0.692067>
10: <-0.567965, 0.445488, 0.692067>
11: <-0.567965, 0.445488, 0.692067>
12: <-0.692067, 0.445488, 0.567965>
13: <-0.692067, 0.445488, 0.567965>
14: <-0.692067, 0.445488, 0.567965>
15: <-0.789573, 0.445488, 0.422036>
16: <-0.789573, 0.445488, 0.422036>
17: <-0.789573, 0.445488, 0.422036>
18: <-0.856737, 0.445488, 0.259888>
19: <-0.856737, 0.445488, 0.259888>
20: <-0.856737, 0.445488, 0.259888>
21: < 0.856737, 0.445488, 0.259889>
22: < 0.856737, 0.445488, 0.259889>
23: < 0.856737, 0.445488, 0.259889>
24: < 0.789573, 0.445488, 0.422037>
25: < 0.789573, 0.445488, 0.422037>
26: < 0.789573, 0.445488, 0.422037>
27: < 0.692066, 0.445488, 0.567966>
28: < 0.692066, 0.445488, 0.567966>
29: < 0.692066, 0.445488, 0.567966>
30: < 0.567964, 0.445488, 0.692067>
31: < 0.567964, 0.445488, 0.692067>
32: < 0.567964, 0.445488, 0.692067>
33: < 0.422035, 0.445488, 0.789574>
34: < 0.422035, 0.445488, 0.789574>
35: < 0.422035, 0.445488, 0.789574>
36: <-0.000000, -1.000000, 0.000000>
37: <-0.000000, -1.000000, 0.000000>
38: <-0.000000, -1.000000, 0.000000>
39: <-0.000000, -1.000000, 0.000000>
40: <-0.000000, -1.000000, 0.000000>
41: <-0.000000, -1.000000, 0.000000>
42: <-0.000000, -1.000000, 0.000000>
43: <-0.000000, -1.000000, 0.000000>
44: <-0.000000, -1.000000, 0.000000>
45: <-0.000000, -1.000000, 0.000000>
46: <-0.000000, -1.000000, 0.000000>
47: <-0.000000, -1.000000, 0.000000>
48: <-0.000000, -1.000000, 0.000000>
49: <-0.000000, -1.000000, 0.000000>
50: <-0.000000, -1.000000, 0.000000>
51: <-0.000000, -1.000000, 0.000000>
52: <-0.000000, -1.000000, 0.000000>
53: <-0.000000, -1.000000, 0.000000>
54: <-0.000000, -1.000000, 0.000000>
55: <-0.000000, -1.000000, 0.000000>
56: <-0.000000, -1.000000, 0.000000>
57: <-0.000000, -1.000000, 0.000000>
58: <-0.000000, -1.000000, 0.000000>
59: <-0.000000, -1.000000, 0.000000>
60: <-0.000000, -1.000000, 0.000000>
61: <-0.000000, -1.000000, 0.000000>
62: <-0.000000, -1.000000, 0.000000>
63: <-0.000000, -1.000000, 0.000000>
64: <-0.000000, -1.000000, 0.000000>
65: <-0.000000, -1.000000, 0.000000>
66: <-0.000000, -1.000000, 0.000000>
67: <-0.000000, -1.000000, 0.000000>
68: < 0.259887, 0.445488, 0.856737>
69: < 0.259887, 0.445488, 0.856737>
70: < 0.259887, 0.445488, 0.856737>
71: < 0.087753, 0.445488, 0.890977>
72: < 0.087753, 0.445488, 0.890977>
73: < 0.087753, 0.445488, 0.890977>
74: <-0.890977, 0.445488, 0.087754>
75: <-0.890977, 0.445488, 0.087754>
76: <-0.890977, 0.445488, 0.087754>
77: <-0.890977, 0.445488, -0.087753>
78: <-0.890977, 0.445488, -0.087753>
79: <-0.890977, 0.445488, -0.087753>
80: <-0.856737, 0.445488, -0.259888>
81: <-0.856737, 0.445488, -0.259888>
82: <-0.856737, 0.445488, -0.259888>
83: <-0.789573, 0.445488, -0.422035>
84: <-0.789573, 0.445488, -0.422035>
85: <-0.789573, 0.445488, -0.422035>
86: <-0.692067, 0.445488, -0.567965>
87: <-0.692067, 0.445488, -0.567965>
88: <-0.692067, 0.445488, -0.567965>
89: <-0.567965, 0.445488, -0.692067>
90: <-0.567965, 0.445488, -0.692067>
91: <-0.567965, 0.445488, -0.692067>
92: <-0.422036, 0.445488, -0.789573>
93: <-0.422036, 0.445488, -0.789573>
94: <-0.422036, 0.445488, -0.789573>
95: <-0.259888, 0.445488, -0.856737>
96: <-0.259888, 0.445488, -0.856737>
97: <-0.259888, 0.445488, -0.856737>
98: <-0.087753, 0.445488, -0.890977>
99: <-0.087753, 0.445488, -0.890977>
100: <-0.087753, 0.445488, -0.890977>
101: < 0.087754, 0.445488, -0.890977>
102: < 0.087754, 0.445488, -0.890977>
103: < 0.087754, 0.445488, -0.890977>
104: < 0.259889, 0.445488, -0.856737>
105: < 0.259889, 0.445488, -0.856737>
106: < 0.259889, 0.445488, -0.856737>
107: < 0.422036, 0.445488, -0.789573>
108: < 0.422036, 0.445488, -0.789573>
109: < 0.422036, 0.445488, -0.789573>
110: < 0.567965, 0.445488, -0.692066>
111: < 0.567965, 0.445488, -0.692066>
112: < 0.567965, 0.445488, -0.692066>
113: < 0.692067, 0.445488, -0.567964>
114: < 0.692067, 0.445488, -0.567964>
115: < 0.692067, 0.445488, -0.567964>
116: < 0.789574, 0.445488, -0.422035>
117: < 0.789574, 0.445488, -0.422035>
118: < 0.789574, 0.445488, -0.422035>
119: < 0.856737, 0.445488, -0.259887>
120: < 0.856737, 0.445488, -0.259887>
121: < 0.856737, 0.445488, -0.259887>
122: < 0.890977, 0.445488, -0.087753>
123: < 0.890977, 0.445488, -0.087753>
124: < 0.890977, 0.445488, -0.087753>
125: < 0.890977, 0.445488, 0.087754>
126: < 0.890977, 0.445488, 0.087754>
127: < 0.890977, 0.445488, 0.087754>
FaceList: Count 62. Hash: 11102693598481718079 FaceList: Count 62. Hash: 11102693598481718079
0: 0, 1, 2,
1: 3, 4, 5,
2: 6, 7, 8,
3: 9, 10, 11,
4: 12, 13, 14,
5: 15, 16, 17,
6: 18, 19, 20,
7: 21, 22, 23,
8: 24, 25, 26,
9: 27, 28, 29,
10: 30, 31, 32,
11: 33, 34, 35,
12: 36, 37, 38,
13: 36, 38, 39,
14: 36, 39, 40,
15: 36, 40, 41,
16: 36, 41, 42,
17: 36, 42, 43,
18: 36, 43, 44,
19: 36, 44, 45,
20: 36, 45, 46,
21: 36, 46, 47,
22: 36, 47, 48,
23: 36, 48, 49,
24: 36, 49, 50,
25: 36, 50, 51,
26: 36, 51, 52,
27: 36, 52, 53,
28: 36, 53, 54,
29: 36, 54, 55,
30: 36, 55, 56,
31: 36, 56, 57,
32: 36, 57, 58,
33: 36, 58, 59,
34: 36, 59, 60,
35: 36, 60, 61,
36: 36, 61, 62,
37: 36, 62, 63,
38: 36, 63, 64,
39: 36, 64, 65,
40: 36, 65, 66,
41: 66, 67, 36,
42: 68, 69, 70,
43: 71, 72, 73,
44: 74, 75, 76,
45: 77, 78, 79,
46: 80, 81, 82,
47: 83, 84, 85,
48: 86, 87, 88,
49: 89, 90, 91,
50: 92, 93, 94,
51: 95, 96, 97,
52: 98, 99, 100,
53: 101, 102, 103,
54: 104, 105, 106,
55: 107, 108, 109,
56: 110, 111, 112,
57: 113, 114, 115,
58: 116, 117, 118,
59: 119, 120, 121,
60: 122, 123, 124,
61: 125, 126, 127,
FaceMaterialIds: Count 62. Hash: 15454348664434923102 FaceMaterialIds: Count 62. Hash: 15454348664434923102
Node Name: transform Node Name: transform

@ -1,20 +1,39 @@
ProductName: multiple_mesh_one_material.dbgsg ProductName: multiple_mesh_one_material.dbgsg
debugSceneGraphVersion: 1 debugSceneGraphVersion: 1
multiple_mesh_one_material multiple_mesh_one_material
Node Name: Cube
Node Path: RootNode.Cube Node Path: RootNode.Cube
Node Type: MeshData Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285 Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561 Normals: Count 24. Hash: 5807525742165000561
FaceList: Count 12. Hash: 17730128541777770264 FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7110546404675862471 FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: Cylinder
Node Path: RootNode.Cylinder Node Path: RootNode.Cylinder
Node Type: MeshData Node Type: MeshData
Positions: Count 192. Hash: 1283526254311745349 Positions: Count 192. Hash: 1283526254311745349
Normals: Count 192. Hash: 1873340970602844856 Normals: Count 192. Hash: 1873340970602844856
FaceList: Count 124. Hash: 4139150512255795252 FaceList: Count 124. Hash: 3728991722746136013
FaceMaterialIds: Count 124. Hash: 2372486708814455910 FaceMaterialIds: Count 124. Hash: 2372486708814455910
Node Name: Cube_optimized
Node Path: RootNode.Cube_optimized
Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561
FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: Cylinder_optimized
Node Path: RootNode.Cylinder_optimized
Node Type: MeshData
Positions: Count 192. Hash: 7921557352486854444
Normals: Count 192. Hash: 1873340970602844856
FaceList: Count 124. Hash: 18311637590974204568
FaceMaterialIds: Count 124. Hash: 2372486708814455910
Node Name: transform
Node Path: RootNode.Cube.transform Node Path: RootNode.Cube.transform
Node Type: TransformData Node Type: TransformData
Matrix: Matrix:
@ -23,33 +42,56 @@ Node Type: TransformData
BasisZ: < 0.000000, -100.000000, -0.000016> BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000> Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cube.UVMap Node Path: RootNode.Cube.UVMap
Node Type: MeshVertexUVData Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736 UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap UVCustomName: UVMap
Node Name: SingleMaterial
Node Path: RootNode.Cube.SingleMaterial Node Path: RootNode.Cube.SingleMaterial
Node Type: MaterialData Node Type: MaterialData
MaterialName: SingleMaterial MaterialName: SingleMaterial
UniqueId: 41 UniqueId: 14432700632681398127
IsNoDraw: false IsNoDraw: false
DiffuseColor: < 0.814049, 0.814049, 0.814049> DiffuseColor: < 0.814049, 0.814049, 0.814049>
SpecularColor: < 0.203512, 0.203512, 0.203512> SpecularColor: < 0.814049, 0.814049, 0.814049>
EmissiveColor: < 0.000000, 0.000000, 0.000000> EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000 Opacity: 1.000000
Shininess: 25.000000 Shininess: 25.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture: TwoMeshOneMaterial/FBXTestTexture.png
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture: TwoMeshOneMaterial/FBXTestTexture.png
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cube.TangentSet_MikkT_0 Node Path: RootNode.Cube.TangentSet_MikkT_0
Node Type: MeshVertexTangentData Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049 Tangents: Count 24. Hash: 13438447437797057049
TangentSpace: 1 TangentSpace: 1
SetIndex: 0 SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cube.BitangentSet_MikkT_0 Node Path: RootNode.Cube.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017 Bitangents: Count 24. Hash: 11372562338897179017
TangentSpace: 1 TangentSpace: 1
Node Name: transform
Node Path: RootNode.Cylinder.transform Node Path: RootNode.Cylinder.transform
Node Type: TransformData Node Type: TransformData
Matrix: Matrix:
@ -58,30 +100,168 @@ Node Type: TransformData
BasisZ: < 0.000000, -100.000000, -0.000016> BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: <-4.388482, 0.000000, 0.000000> Transl: <-4.388482, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cylinder.UVMap Node Path: RootNode.Cylinder.UVMap
Node Type: MeshVertexUVData Node Type: MeshVertexUVData
UVs: Count 192. Hash: 27253578623892681 UVs: Count 192. Hash: 27253578623892681
UVCustomName: UVMap UVCustomName: UVMap
Node Name: SingleMaterial
Node Path: RootNode.Cylinder.SingleMaterial Node Path: RootNode.Cylinder.SingleMaterial
Node Type: MaterialData Node Type: MaterialData
MaterialName: SingleMaterial MaterialName: SingleMaterial
UniqueId: 41 UniqueId: 14432700632681398127
IsNoDraw: false IsNoDraw: false
DiffuseColor: < 0.814049, 0.814049, 0.814049> DiffuseColor: < 0.814049, 0.814049, 0.814049>
SpecularColor: < 0.203512, 0.203512, 0.203512> SpecularColor: < 0.814049, 0.814049, 0.814049>
EmissiveColor: < 0.000000, 0.000000, 0.000000> EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000 Opacity: 1.000000
Shininess: 25.000000 Shininess: 25.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture: TwoMeshOneMaterial/FBXTestTexture.png
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture: TwoMeshOneMaterial/FBXTestTexture.png
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cylinder.TangentSet_MikkT_0 Node Path: RootNode.Cylinder.TangentSet_MikkT_0
Node Type: MeshVertexTangentData Node Type: MeshVertexTangentData
Tangents: Count 192. Hash: 5663634855689915515 Tangents: Count 192. Hash: 11165448242141781141
TangentSpace: 1 TangentSpace: 1
SetIndex: 0 SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cylinder.BitangentSet_MikkT_0 Node Path: RootNode.Cylinder.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData Node Type: MeshVertexBitangentData
Bitangents: Count 192. Hash: 10115392016288328891 Bitangents: Count 192. Hash: 7987814487334449536
TangentSpace: 1
Node Name: UVMap
Node Path: RootNode.Cube_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cube_optimized.TangentSet_MikkT_0
Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049
TangentSpace: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cube_optimized.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017
TangentSpace: 1
Node Name: transform
Node Path: RootNode.Cube_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: SingleMaterial
Node Path: RootNode.Cube_optimized.SingleMaterial
Node Type: MaterialData
MaterialName: SingleMaterial
UniqueId: 14432700632681398127
IsNoDraw: false
DiffuseColor: < 0.814049, 0.814049, 0.814049>
SpecularColor: < 0.814049, 0.814049, 0.814049>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 25.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture: TwoMeshOneMaterial/FBXTestTexture.png
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture: TwoMeshOneMaterial/FBXTestTexture.png
Node Name: UVMap
Node Path: RootNode.Cylinder_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 192. Hash: 13790301632763350589
UVCustomName: UVMap
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cylinder_optimized.TangentSet_MikkT_0
Node Type: MeshVertexTangentData
Tangents: Count 192. Hash: 7293001660047850407
TangentSpace: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cylinder_optimized.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData
Bitangents: Count 192. Hash: 2874689498270494796
TangentSpace: 1 TangentSpace: 1
Node Name: transform
Node Path: RootNode.Cylinder_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: <-4.388482, 0.000000, 0.000000>
Node Name: SingleMaterial
Node Path: RootNode.Cylinder_optimized.SingleMaterial
Node Type: MaterialData
MaterialName: SingleMaterial
UniqueId: 14432700632681398127
IsNoDraw: false
DiffuseColor: < 0.814049, 0.814049, 0.814049>
SpecularColor: < 0.814049, 0.814049, 0.814049>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 25.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture: TwoMeshOneMaterial/FBXTestTexture.png
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture: TwoMeshOneMaterial/FBXTestTexture.png

@ -1,20 +1,39 @@
ProductName: multiple_mesh_multiple_material.dbgsg ProductName: multiple_mesh_multiple_material.dbgsg
debugSceneGraphVersion: 1 debugSceneGraphVersion: 1
multiple_mesh_multiple_material multiple_mesh_multiple_material
Node Name: Cube
Node Path: RootNode.Cube Node Path: RootNode.Cube
Node Type: MeshData Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285 Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561 Normals: Count 24. Hash: 5807525742165000561
FaceList: Count 12. Hash: 17730128541777770264 FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7110546404675862471 FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: Cylinder
Node Path: RootNode.Cylinder Node Path: RootNode.Cylinder
Node Type: MeshData Node Type: MeshData
Positions: Count 192. Hash: 1283526254311745349 Positions: Count 192. Hash: 1283526254311745349
Normals: Count 192. Hash: 1873340970602844856 Normals: Count 192. Hash: 1873340970602844856
FaceList: Count 124. Hash: 4139150512255795252 FaceList: Count 124. Hash: 3728991722746136013
FaceMaterialIds: Count 124. Hash: 2372486708814455910 FaceMaterialIds: Count 124. Hash: 2372486708814455910
Node Name: Cube_optimized
Node Path: RootNode.Cube_optimized
Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561
FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: Cylinder_optimized
Node Path: RootNode.Cylinder_optimized
Node Type: MeshData
Positions: Count 192. Hash: 7921557352486854444
Normals: Count 192. Hash: 1873340970602844856
FaceList: Count 124. Hash: 18311637590974204568
FaceMaterialIds: Count 124. Hash: 2372486708814455910
Node Name: transform
Node Path: RootNode.Cube.transform Node Path: RootNode.Cube.transform
Node Type: TransformData Node Type: TransformData
Matrix: Matrix:
@ -23,33 +42,56 @@ Node Type: TransformData
BasisZ: < 0.000000, -100.000000, -0.000016> BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000> Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cube.UVMap Node Path: RootNode.Cube.UVMap
Node Type: MeshVertexUVData Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736 UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap UVCustomName: UVMap
Node Name: SingleMaterial
Node Path: RootNode.Cube.SingleMaterial Node Path: RootNode.Cube.SingleMaterial
Node Type: MaterialData Node Type: MaterialData
MaterialName: SingleMaterial MaterialName: SingleMaterial
UniqueId: 41 UniqueId: 14432700632681398127
IsNoDraw: false IsNoDraw: false
DiffuseColor: < 0.814049, 0.814049, 0.814049> DiffuseColor: < 0.814049, 0.814049, 0.814049>
SpecularColor: < 0.203512, 0.203512, 0.203512> SpecularColor: < 0.814049, 0.814049, 0.814049>
EmissiveColor: < 0.000000, 0.000000, 0.000000> EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000 Opacity: 1.000000
Shininess: 25.000000 Shininess: 25.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture: TwoMeshTwoMaterial/FBXTestTexture.png
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture: TwoMeshTwoMaterial/FBXTestTexture.png
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cube.TangentSet_MikkT_0 Node Path: RootNode.Cube.TangentSet_MikkT_0
Node Type: MeshVertexTangentData Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049 Tangents: Count 24. Hash: 13438447437797057049
TangentSpace: 1 TangentSpace: 1
SetIndex: 0 SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cube.BitangentSet_MikkT_0 Node Path: RootNode.Cube.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017 Bitangents: Count 24. Hash: 11372562338897179017
TangentSpace: 1 TangentSpace: 1
Node Name: transform
Node Path: RootNode.Cylinder.transform Node Path: RootNode.Cylinder.transform
Node Type: TransformData Node Type: TransformData
Matrix: Matrix:
@ -58,30 +100,168 @@ Node Type: TransformData
BasisZ: < 0.000000, -100.000000, -0.000016> BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: <-4.388482, 0.000000, 0.000000> Transl: <-4.388482, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cylinder.UVMap Node Path: RootNode.Cylinder.UVMap
Node Type: MeshVertexUVData Node Type: MeshVertexUVData
UVs: Count 192. Hash: 27253578623892681 UVs: Count 192. Hash: 27253578623892681
UVCustomName: UVMap UVCustomName: UVMap
Node Name: SecondMaterial
Node Path: RootNode.Cylinder.SecondMaterial Node Path: RootNode.Cylinder.SecondMaterial
Node Type: MaterialData Node Type: MaterialData
MaterialName: SecondMaterial MaterialName: SecondMaterial
UniqueId: 42 UniqueId: 5229255358802505087
IsNoDraw: false IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000> DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.200000, 0.200000, 0.200000> SpecularColor: < 0.800000, 0.800000, 0.800000>
EmissiveColor: < 0.000000, 0.000000, 0.000000> EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000 Opacity: 1.000000
Shininess: 25.000000 Shininess: 25.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture: TwoMeshTwoMaterial/FBXSecondTestTexture.png
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture: TwoMeshTwoMaterial/FBXSecondTestTexture.png
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cylinder.TangentSet_MikkT_0 Node Path: RootNode.Cylinder.TangentSet_MikkT_0
Node Type: MeshVertexTangentData Node Type: MeshVertexTangentData
Tangents: Count 192. Hash: 5663634855689915515 Tangents: Count 192. Hash: 11165448242141781141
TangentSpace: 1 TangentSpace: 1
SetIndex: 0 SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cylinder.BitangentSet_MikkT_0 Node Path: RootNode.Cylinder.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData Node Type: MeshVertexBitangentData
Bitangents: Count 192. Hash: 10115392016288328891 Bitangents: Count 192. Hash: 7987814487334449536
TangentSpace: 1
Node Name: UVMap
Node Path: RootNode.Cube_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cube_optimized.TangentSet_MikkT_0
Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049
TangentSpace: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cube_optimized.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017
TangentSpace: 1
Node Name: transform
Node Path: RootNode.Cube_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: SingleMaterial
Node Path: RootNode.Cube_optimized.SingleMaterial
Node Type: MaterialData
MaterialName: SingleMaterial
UniqueId: 14432700632681398127
IsNoDraw: false
DiffuseColor: < 0.814049, 0.814049, 0.814049>
SpecularColor: < 0.814049, 0.814049, 0.814049>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 25.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture: TwoMeshTwoMaterial/FBXTestTexture.png
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture: TwoMeshTwoMaterial/FBXTestTexture.png
Node Name: UVMap
Node Path: RootNode.Cylinder_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 192. Hash: 13790301632763350589
UVCustomName: UVMap
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cylinder_optimized.TangentSet_MikkT_0
Node Type: MeshVertexTangentData
Tangents: Count 192. Hash: 7293001660047850407
TangentSpace: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cylinder_optimized.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData
Bitangents: Count 192. Hash: 2874689498270494796
TangentSpace: 1 TangentSpace: 1
Node Name: transform
Node Path: RootNode.Cylinder_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: <-4.388482, 0.000000, 0.000000>
Node Name: SecondMaterial
Node Path: RootNode.Cylinder_optimized.SecondMaterial
Node Type: MaterialData
MaterialName: SecondMaterial
UniqueId: 5229255358802505087
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.800000, 0.800000, 0.800000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 25.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture: TwoMeshTwoMaterial/FBXSecondTestTexture.png
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture: TwoMeshTwoMaterial/FBXSecondTestTexture.png

@ -0,0 +1,201 @@
ProductName: multiple_mesh_multiple_material.dbgsg
debugSceneGraphVersion: 1
multiple_mesh_multiple_material
Node Name: Cube
Node Path: RootNode.Cube
Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561
FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: Cylinder
Node Path: RootNode.Cylinder
Node Type: MeshData
Positions: Count 192. Hash: 1283526254311745349
Normals: Count 192. Hash: 1873340970602844856
FaceList: Count 124. Hash: 3728991722746136013
FaceMaterialIds: Count 124. Hash: 2372486708814455910
Node Name: Cube_optimized
Node Path: RootNode.Cube_optimized
Node Type: MeshData
Positions: Count 24. Hash: 8661923109306356285
Normals: Count 24. Hash: 5807525742165000561
FaceList: Count 12. Hash: 9888799799190757436
FaceMaterialIds: Count 12. Hash: 7110546404675862471
Node Name: transform
Node Path: RootNode.Cube.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cube.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap
Node Name: SingleMaterial
Node Path: RootNode.Cube.SingleMaterial
Node Type: MaterialData
MaterialName: SingleMaterial
UniqueId: 14432700632681398127
IsNoDraw: false
DiffuseColor: < 0.814049, 0.814049, 0.814049>
SpecularColor: < 0.814049, 0.814049, 0.814049>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 25.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture: TwoMeshTwoMaterial/FBXTestTexture.png
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture: TwoMeshTwoMaterial/FBXTestTexture.png
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cube.TangentSet_MikkT_0
Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049
TangentSpace: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cube.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017
TangentSpace: 1
Node Name: transform
Node Path: RootNode.Cylinder.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: <-4.388482, 0.000000, 0.000000>
Node Name: UVMap
Node Path: RootNode.Cylinder.UVMap
Node Type: MeshVertexUVData
UVs: Count 192. Hash: 27253578623892681
UVCustomName: UVMap
Node Name: SecondMaterial
Node Path: RootNode.Cylinder.SecondMaterial
Node Type: MaterialData
MaterialName: SecondMaterial
UniqueId: 5229255358802505087
IsNoDraw: false
DiffuseColor: < 0.800000, 0.800000, 0.800000>
SpecularColor: < 0.800000, 0.800000, 0.800000>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 25.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture: TwoMeshTwoMaterial/FBXSecondTestTexture.png
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture: TwoMeshTwoMaterial/FBXSecondTestTexture.png
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cylinder.TangentSet_MikkT_0
Node Type: MeshVertexTangentData
Tangents: Count 192. Hash: 11165448242141781141
TangentSpace: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cylinder.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData
Bitangents: Count 192. Hash: 7987814487334449536
TangentSpace: 1
Node Name: UVMap
Node Path: RootNode.Cube_optimized.UVMap
Node Type: MeshVertexUVData
UVs: Count 24. Hash: 1622169145591646736
UVCustomName: UVMap
Node Name: TangentSet_MikkT_0
Node Path: RootNode.Cube_optimized.TangentSet_MikkT_0
Node Type: MeshVertexTangentData
Tangents: Count 24. Hash: 13438447437797057049
TangentSpace: 1
SetIndex: 0
Node Name: BitangentSet_MikkT_0
Node Path: RootNode.Cube_optimized.BitangentSet_MikkT_0
Node Type: MeshVertexBitangentData
Bitangents: Count 24. Hash: 11372562338897179017
TangentSpace: 1
Node Name: transform
Node Path: RootNode.Cube_optimized.transform
Node Type: TransformData
Matrix:
BasisX: < 100.000000, 0.000000, 0.000000>
BasisY: < 0.000000, -0.000016, 100.000000>
BasisZ: < 0.000000, -100.000000, -0.000016>
Transl: < 0.000000, 0.000000, 0.000000>
Node Name: SingleMaterial
Node Path: RootNode.Cube_optimized.SingleMaterial
Node Type: MaterialData
MaterialName: SingleMaterial
UniqueId: 14432700632681398127
IsNoDraw: false
DiffuseColor: < 0.814049, 0.814049, 0.814049>
SpecularColor: < 0.814049, 0.814049, 0.814049>
EmissiveColor: < 0.000000, 0.000000, 0.000000>
Opacity: 1.000000
Shininess: 25.000000
UseColorMap: Not set
BaseColor: Not set
UseMetallicMap: Not set
MetallicFactor: Not set
UseRoughnessMap: Not set
RoughnessFactor: Not set
UseEmissiveMap: Not set
EmissiveIntensity: Not set
UseAOMap: Not set
DiffuseTexture: TwoMeshTwoMaterial/FBXTestTexture.png
SpecularTexture:
BumpTexture:
NormalTexture:
MetallicTexture:
RoughnessTexture:
AmbientOcclusionTexture:
EmissiveTexture:
BaseColorTexture: TwoMeshTwoMaterial/FBXTestTexture.png

@ -44,6 +44,7 @@ class BlackboxAssetTest:
asset_folder: str asset_folder: str
override_asset_folder: str = "" override_asset_folder: str = ""
scene_debug_file: str = "" scene_debug_file: str = ""
override_scene_debug_file: str = ""
assets: List[asset_db_utils.DBSourceAsset] = () assets: List[asset_db_utils.DBSourceAsset] = ()
override_assets: List[asset_db_utils.DBSourceAsset] = () override_assets: List[asset_db_utils.DBSourceAsset] = ()
@ -59,25 +60,6 @@ blackbox_fbx_tests = [
source_file_name = "OneMeshOneMaterial.fbx", source_file_name = "OneMeshOneMaterial.fbx",
uuid = b"8a9164adb84859be893e18aa819438e1", uuid = b"8a9164adb84859be893e18aa819438e1",
jobs = [ jobs = [
asset_db_utils.DBJob(
job_key= "fbx",
builder_guid=b"0bbfc8c191374404bd9464c0364efbfb",
status=4,
error_count=0,
warning_count=2,
products = [
asset_db_utils.DBProduct(
product_name="onemeshonematerial/onemeshonematerial.cgf",
sub_id=-1588558583,
asset_type=b"c2869e3bdda04e018fe36770d788866b"
),
asset_db_utils.DBProduct(
product_name="onemeshonematerial/onemeshonematerial.dccmtl",
sub_id=382053982,
asset_type=b"c88469cf21e741eb96fdbf14fbb05edc"
),
],
),
asset_db_utils.DBJob( asset_db_utils.DBJob(
job_key= "Scene compilation", job_key= "Scene compilation",
builder_guid=b"bd8bf65894854fe3830e8ec3a23c35f3", builder_guid=b"bd8bf65894854fe3830e8ec3a23c35f3",
@ -110,46 +92,12 @@ blackbox_fbx_tests = [
source_file_name = "lodtest.fbx", source_file_name = "lodtest.fbx",
uuid = b"44c8627fe2c25aae91fe3ff9547be3b9", uuid = b"44c8627fe2c25aae91fe3ff9547be3b9",
jobs = [ jobs = [
asset_db_utils.DBJob(
job_key= "fbx",
builder_guid=b"0bbfc8c191374404bd9464c0364efbfb",
status=4,
error_count=0,
warning_count=2,
products = [
asset_db_utils.DBProduct(
product_name= "softnaminglod/lodtest.cgf",
sub_id=1091612206,
asset_type=b"c2869e3bdda04e018fe36770d788866b"
),
asset_db_utils.DBProduct(
product_name="softnaminglod/lodtest.dccmtl",
sub_id=1960621672,
asset_type=b"c88469cf21e741eb96fdbf14fbb05edc"
),
asset_db_utils.DBProduct(
product_name="softnaminglod/lodtest_lod1.cgf",
sub_id=1091677742,
asset_type=b"9aae4926cb6a4c609948a1a22f51db23"
),
asset_db_utils.DBProduct(
product_name="softnaminglod/lodtest_lod2.cgf",
sub_id=1091743278,
asset_type=b"9aae4926cb6a4c609948a1a22f51db23"
),
asset_db_utils.DBProduct(
product_name="softnaminglod/lodtest_lod3.cgf",
sub_id=1091808814,
asset_type=b"9aae4926cb6a4c609948a1a22f51db23"
),
],
),
asset_db_utils.DBJob( asset_db_utils.DBJob(
job_key= "Scene compilation", job_key= "Scene compilation",
builder_guid=b"bd8bf65894854fe3830e8ec3a23c35f3", builder_guid=b"bd8bf65894854fe3830e8ec3a23c35f3",
status=4, status=4,
error_count=0, error_count=0,
warning_count=0, warning_count=9,
products = [ products = [
asset_db_utils.DBProduct( asset_db_utils.DBProduct(
product_name='softnaminglod/lodtest.dbgsg', product_name='softnaminglod/lodtest.dbgsg',
@ -176,26 +124,12 @@ blackbox_fbx_tests = [
source_file_name = "physicstest.fbx", source_file_name = "physicstest.fbx",
uuid = b"df957b7918cf5b029806c73f630fa1c8", uuid = b"df957b7918cf5b029806c73f630fa1c8",
jobs = [ jobs = [
asset_db_utils.DBJob(
job_key= "fbx",
builder_guid=b"0bbfc8c191374404bd9464c0364efbfb",
status=4,
error_count=0,
warning_count=2,
products = [
asset_db_utils.DBProduct(
product_name= "softnamingphysics/physicstest.cgf",
sub_id=653314392,
asset_type=b"c2869e3bdda04e018fe36770d788866b"
),
],
),
asset_db_utils.DBJob( asset_db_utils.DBJob(
job_key= "Scene compilation", job_key= "Scene compilation",
builder_guid=b"bd8bf65894854fe3830e8ec3a23c35f3", builder_guid=b"bd8bf65894854fe3830e8ec3a23c35f3",
status=4, status=4,
error_count=0, error_count=0,
warning_count=1, warning_count=6,
products = [ products = [
asset_db_utils.DBProduct( asset_db_utils.DBProduct(
product_name='softnamingphysics/physicstest.dbgsg', product_name='softnamingphysics/physicstest.dbgsg',
@ -224,30 +158,6 @@ blackbox_fbx_tests = [
source_file_name = "multiple_mesh_one_material.fbx", source_file_name = "multiple_mesh_one_material.fbx",
uuid = b"597618fd497659a1b197a015fe47aa95", uuid = b"597618fd497659a1b197a015fe47aa95",
jobs = [ jobs = [
asset_db_utils.DBJob(
job_key= "fbx",
builder_guid=b"0bbfc8c191374404bd9464c0364efbfb",
status=4,
error_count=0,
warning_count=2,
products = [
asset_db_utils.DBProduct(
product_name="twomeshonematerial/multiple_mesh_one_material.dccmtl",
sub_id=-1706078587,
asset_type=b"c88469cf21e741eb96fdbf14fbb05edc"
),
asset_db_utils.DBProduct(
product_name="twomeshonematerial/test_cube.cgf",
sub_id=-112145915,
asset_type=b"c2869e3bdda04e018fe36770d788866b"
),
asset_db_utils.DBProduct(
product_name="twomeshonematerial/test_cylinder.cgf",
sub_id=2087742249,
asset_type=b"c2869e3bdda04e018fe36770d788866b"
),
],
),
asset_db_utils.DBJob( asset_db_utils.DBJob(
job_key= "Scene compilation", job_key= "Scene compilation",
builder_guid=b"bd8bf65894854fe3830e8ec3a23c35f3", builder_guid=b"bd8bf65894854fe3830e8ec3a23c35f3",
@ -279,25 +189,6 @@ blackbox_fbx_tests = [
source_file_name = "multiple_mesh_linked_materials.fbx", source_file_name = "multiple_mesh_linked_materials.fbx",
uuid = b"25d8301c2eef5dc7bded310db8ea608d", uuid = b"25d8301c2eef5dc7bded310db8ea608d",
jobs = [ jobs = [
asset_db_utils.DBJob(
job_key= "fbx",
builder_guid=b"0bbfc8c191374404bd9464c0364efbfb",
status=4,
error_count=0,
warning_count=2,
products = [
asset_db_utils.DBProduct(
product_name='twomeshlinkedmaterials/multiple_mesh_linked_materials.cgf',
sub_id=1259347154,
asset_type=b'c2869e3bdda04e018fe36770d788866b'
),
asset_db_utils.DBProduct(
product_name='twomeshlinkedmaterials/multiple_mesh_linked_materials.dccmtl',
sub_id=1829742731,
asset_type=b'c88469cf21e741eb96fdbf14fbb05edc'
),
],
),
asset_db_utils.DBJob( asset_db_utils.DBJob(
job_key= "Scene compilation", job_key= "Scene compilation",
platform= "pc", platform= "pc",
@ -331,25 +222,6 @@ blackbox_fbx_tests = [
source_file_name = "single_mesh_multiple_materials.fbx", source_file_name = "single_mesh_multiple_materials.fbx",
uuid = b"f08fd585dfa35881b4bf86637da5e858", uuid = b"f08fd585dfa35881b4bf86637da5e858",
jobs = [ jobs = [
asset_db_utils.DBJob(
job_key= "fbx",
builder_guid=b"0bbfc8c191374404bd9464c0364efbfb",
status=4,
error_count=0,
warning_count=2,
products = [
asset_db_utils.DBProduct(
product_name='onemeshmultiplematerials/single_mesh_multiple_materials.cgf',
sub_id=1296081148,
asset_type=b'c2869e3bdda04e018fe36770d788866b'
),
asset_db_utils.DBProduct(
product_name='onemeshmultiplematerials/single_mesh_multiple_materials.dccmtl',
sub_id=-229825489,
asset_type=b'c88469cf21e741eb96fdbf14fbb05edc'
),
],
),
asset_db_utils.DBJob( asset_db_utils.DBJob(
job_key= "Scene compilation", job_key= "Scene compilation",
platform= "pc", platform= "pc",
@ -381,20 +253,6 @@ blackbox_fbx_tests = [
source_file_name="VertexColor.fbx", source_file_name="VertexColor.fbx",
uuid=b"207e7e1540785a26b064e9be67361cdf", uuid=b"207e7e1540785a26b064e9be67361cdf",
jobs=[ jobs=[
asset_db_utils.DBJob(
job_key="fbx",
builder_guid=b"0bbfc8c191374404bd9464c0364efbfb",
status=4,
error_count=0,
warning_count=2,
products=[
asset_db_utils.DBProduct(
product_name="vertexcolor/vertexcolor.cgf",
sub_id=-427774918,
asset_type=b"c2869e3bdda04e018fe36770d788866b"
),
],
),
asset_db_utils.DBJob( asset_db_utils.DBJob(
job_key="Scene compilation", job_key="Scene compilation",
builder_guid=b"bd8bf65894854fe3830e8ec3a23c35f3", builder_guid=b"bd8bf65894854fe3830e8ec3a23c35f3",
@ -425,35 +283,12 @@ blackbox_fbx_special_tests = [
asset_folder= "TwoMeshTwoMaterial", asset_folder= "TwoMeshTwoMaterial",
override_asset_folder = "OverrideAssetInfoForTwoMeshTwoMaterial", override_asset_folder = "OverrideAssetInfoForTwoMeshTwoMaterial",
scene_debug_file="multiple_mesh_multiple_material.dbgsg", scene_debug_file="multiple_mesh_multiple_material.dbgsg",
override_scene_debug_file="multiple_mesh_multiple_material_override.dbgsg",
assets = [ assets = [
asset_db_utils.DBSourceAsset( asset_db_utils.DBSourceAsset(
source_file_name = "multiple_mesh_multiple_material.fbx", source_file_name = "multiple_mesh_multiple_material.fbx",
uuid = b"b5915fb874af5c8a866ccabbddb57595", uuid = b"b5915fb874af5c8a866ccabbddb57595",
jobs = [ jobs = [
asset_db_utils.DBJob(
job_key= "fbx",
builder_guid=b"0bbfc8c191374404bd9464c0364efbfb",
status=4,
error_count=0,
warning_count=2,
products = [
asset_db_utils.DBProduct(
product_name="twomeshtwomaterial/multiple_mesh_multiple_material.dccmtl",
sub_id=-1035023097,
asset_type=b"c88469cf21e741eb96fdbf14fbb05edc"
),
asset_db_utils.DBProduct(
product_name="twomeshtwomaterial/test_cube_mesh.cgf",
sub_id=-1822360172,
asset_type=b"c2869e3bdda04e018fe36770d788866b"
),
asset_db_utils.DBProduct(
product_name="twomeshtwomaterial/test_cylinder_mesh.cgf",
sub_id=-1885293549,
asset_type=b"c2869e3bdda04e018fe36770d788866b"
),
],
),
asset_db_utils.DBJob( asset_db_utils.DBJob(
job_key="Scene compilation", job_key="Scene compilation",
builder_guid=b"bd8bf65894854fe3830e8ec3a23c35f3", builder_guid=b"bd8bf65894854fe3830e8ec3a23c35f3",
@ -475,25 +310,6 @@ blackbox_fbx_special_tests = [
source_file_name = "multiple_mesh_multiple_material.fbx", source_file_name = "multiple_mesh_multiple_material.fbx",
uuid = b"b5915fb874af5c8a866ccabbddb57595", uuid = b"b5915fb874af5c8a866ccabbddb57595",
jobs = [ jobs = [
asset_db_utils.DBJob(
job_key= "fbx",
builder_guid=b"0bbfc8c191374404bd9464c0364efbfb",
status=4,
error_count=0,
warning_count=2,
products = [
asset_db_utils.DBProduct(
product_name="twomeshtwomaterial/multiple_mesh_multiple_material.dccmtl",
sub_id=-1035023097,
asset_type=b"c88469cf21e741eb96fdbf14fbb05edc"
),
asset_db_utils.DBProduct(
product_name="twomeshtwomaterial/test_cube_mesh.cgf",
sub_id=-1822360172,
asset_type=b"c2869e3bdda04e018fe36770d788866b"
),
],
),
asset_db_utils.DBJob( asset_db_utils.DBJob(
job_key= "Scene compilation", job_key= "Scene compilation",
builder_guid=b"bd8bf65894854fe3830e8ec3a23c35f3", builder_guid=b"bd8bf65894854fe3830e8ec3a23c35f3",
@ -574,7 +390,7 @@ class TestsFBX_AllPlatforms(object):
for job in expected_source.jobs: for job in expected_source.jobs:
job.platform = ASSET_PROCESSOR_PLATFORM_MAP[workspace.asset_processor_platform] job.platform = ASSET_PROCESSOR_PLATFORM_MAP[workspace.asset_processor_platform]
for product in job.products: for product in job.products:
product.product_name = job.platform + "/" + project.lower() + "/" \ product.product_name = job.platform + "/" \
+ product.product_name + product.product_name
@ -605,7 +421,8 @@ class TestsFBX_AllPlatforms(object):
asset_processor.prepare_test_environment(ap_setup_fixture['tests_dir'], test_assets_folder, asset_processor.prepare_test_environment(ap_setup_fixture['tests_dir'], test_assets_folder,
use_current_root=True, add_scan_folder=False, use_current_root=True, add_scan_folder=False,
existing_function_name=blackbox_params.asset_folder) existing_function_name=blackbox_params.asset_folder)
asset_processor.batch_process(extra_params="--debugOutput") asset_processor.batch_process(extra_params=["--debugOutput",
"--regset=\"/O3DE/SceneAPI/AssetImporter/SkipAtomOutput=true\""])
logger.info(f"Validating assets.") logger.info(f"Validating assets.")
assetsToValidate = blackbox_params.override_assets if overrideAsset else blackbox_params.assets assetsToValidate = blackbox_params.override_assets if overrideAsset else blackbox_params.assets
@ -628,8 +445,11 @@ class TestsFBX_AllPlatforms(object):
ASSET_PROCESSOR_PLATFORM_MAP[workspace.asset_processor_platform])) ASSET_PROCESSOR_PLATFORM_MAP[workspace.asset_processor_platform]))
if blackbox_params.scene_debug_file: if blackbox_params.scene_debug_file:
scene_debug_file = blackbox_params.override_scene_debug_file if overrideAsset\
else blackbox_params.scene_debug_file
debug_graph_path = os.path.join(asset_processor.project_test_cache_folder(), blackbox_params.scene_debug_file) debug_graph_path = os.path.join(asset_processor.project_test_cache_folder(), blackbox_params.scene_debug_file)
expected_debug_graph_path = os.path.join(asset_processor.project_test_source_folder(), blackbox_params.scene_debug_file) expected_debug_graph_path = os.path.join(asset_processor.project_test_source_folder(), scene_debug_file)
logger.info(f"Parsing scene graph: {debug_graph_path}") logger.info(f"Parsing scene graph: {debug_graph_path}")
with open(debug_graph_path, "r") as scene_file: with open(debug_graph_path, "r") as scene_file:

@ -89,13 +89,13 @@ def clear_all_missing_dependencies(asset_db_path) -> None:
class DBProduct: class DBProduct:
product_name: str = None product_name: str = None
sub_id: int = 0 sub_id: int = 0
asset_type: str = None asset_type: bytes = None
@dataclass @dataclass
class DBJob: class DBJob:
job_key: str = None job_key: str = None
builder_guid: str = None builder_guid: bytes = None
status: int = 0 status: int = 0
error_count: int = 0 error_count: int = 0
warning_count: int = 0 warning_count: int = 0
@ -107,7 +107,7 @@ class DBJob:
@dataclass @dataclass
class DBSourceAsset: class DBSourceAsset:
source_file_name: str = None source_file_name: str = None
uuid: str = None uuid: bytes = None
scan_folder_key: str = field(compare=False, default=None) scan_folder_key: str = field(compare=False, default=None)
id: str = field(compare=False, default=None) id: str = field(compare=False, default=None)
# Key: Job ID # Key: Job ID

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:f0f4d4e0155feaa76c80a14128000a0fd9570ab76e79f4847eaef9006324a4d2 oid sha256:19f2c4454bb395cdc0a36d1e45e6a384bbd23037af1a2fb93e088ecfa0f10e5b
size 9084 size 9343

@ -1,6 +1,6 @@
<download name="ClientAuth" type="Map"> <download name="ClientAuth" type="Map">
<index src="filelist.xml" dest="filelist.xml"/> <index src="filelist.xml" dest="filelist.xml"/>
<files> <files>
<file src="level.pak" dest="level.pak" size="ED0" md5="dbf5115226e4b0ea38ebdc3967ba3aa9"/> <file src="level.pak" dest="level.pak" size="E1A" md5="fecbc160ebc2186184504482e3e2eba3"/>
</files> </files>
</download> </download>

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:da041115014f11696d5878d5c21247c17b8d694fa9674e30692259261a7223a2 oid sha256:8a674e05824e5ceec13a0487b318923568710bc8269e5be84adad59c495a7ceb
size 3792 size 3610

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:43b1a23b62fe2ffa05545ac99524f40b6fff49d6e35925b9d6138c00d8082e86 oid sha256:a1c0b621525b8e88c3775ea4c60c2197d1e1b060ace9bad9d6efcb0532817e44
size 9073 size 9356

@ -1,6 +1,6 @@
<download name="ClientAuthPasswordSignIn" type="Map"> <download name="ClientAuthPasswordSignIn" type="Map">
<index src="filelist.xml" dest="filelist.xml"/> <index src="filelist.xml" dest="filelist.xml"/>
<files> <files>
<file src="level.pak" dest="level.pak" size="DDF" md5="ebe91ae5f1ea1ec735b6650b14f3f95b"/> <file src="level.pak" dest="level.pak" size="E53" md5="12728d49c7efe0c8e83e3651a1d13ca6"/>
</files> </files>
</download> </download>

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:a58292341785cb260dc0ccf346259e35e2817ee48fc401a21ab528f6afb97b52 oid sha256:f318a1787069385de291660f79e350cea2ca2c3ef3b5e0576686066bd9c49395
size 3551 size 3667

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:f3d5121b26608b02747e245071ccff29ac57358cb6349ec9495a7a003ac12467 oid sha256:afc5d665128738e6bea09e78a16ee38acc923a8ecefff90d987858ce72c395fa
size 8942 size 9360

@ -1,6 +1,6 @@
<download name="ClientAuthPasswordSignUp" type="Map"> <download name="ClientAuthPasswordSignUp" type="Map">
<index src="filelist.xml" dest="filelist.xml"/> <index src="filelist.xml" dest="filelist.xml"/>
<files> <files>
<file src="level.pak" dest="level.pak" size="DDA" md5="aa6df891d505d6d9175beee4b55626db"/> <file src="level.pak" dest="level.pak" size="E44" md5="acfaa325178533f135cd683d3782cc8e"/>
</files> </files>
</download> </download>

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:605391d415b828b100bada11d108099520c0b6a020f17588887b610475805d90 oid sha256:87882b64688a77815d93c6973929fa21b89dc6c13d4866c710124ce2cd0f411e
size 3546 size 3652

@ -30,9 +30,6 @@ function metrics:OnSendMetricsFailure(requestId, errorMessage)
end end
function metrics:OnDeactivate() function metrics:OnDeactivate()
AWSMetricsRequestBus.Broadcast.FlushMetrics()
Debug.Log("Stop generating new test events and flushed the buffered metrics.")
self.tickBusHandler:Disconnect() self.tickBusHandler:Disconnect()
self.metricsNotificationHandler:Disconnect() self.metricsNotificationHandler:Disconnect()
end end
@ -40,7 +37,7 @@ end
function metrics:OnTick(deltaTime, timePoint) function metrics:OnTick(deltaTime, timePoint)
self.tickTime = self.tickTime + deltaTime self.tickTime = self.tickTime + deltaTime
if self.tickTime > 2.0 then if self.tickTime > 5.0 then
defaultAttribute = AWSMetrics_MetricsAttribute() defaultAttribute = AWSMetrics_MetricsAttribute()
defaultAttribute:SetName("event_name") defaultAttribute:SetName("event_name")
defaultAttribute:SetStrValue("login") defaultAttribute:SetStrValue("login")
@ -57,6 +54,9 @@ function metrics:OnTick(deltaTime, timePoint)
if self.numSubmittedMetricsEvents % 2 == 0 then if self.numSubmittedMetricsEvents % 2 == 0 then
if AWSMetricsRequestBus.Broadcast.SubmitMetrics(attributeList.attributes, 0, "lua", false) then if AWSMetricsRequestBus.Broadcast.SubmitMetrics(attributeList.attributes, 0, "lua", false) then
Debug.Log("Submitted metrics without buffer.") Debug.Log("Submitted metrics without buffer.")
AWSMetricsRequestBus.Broadcast.FlushMetrics()
Debug.Log("Flushed the buffered metrics.")
else else
Debug.Log("Failed to Submit metrics without buffer.") Debug.Log("Failed to Submit metrics without buffer.")
end end
@ -67,7 +67,7 @@ function metrics:OnTick(deltaTime, timePoint)
Debug.Log("Failed to Submit metrics with buffer.") Debug.Log("Failed to Submit metrics with buffer.")
end end
end end
self.numSubmittedMetricsEvents = self.numSubmittedMetricsEvents + 1 self.numSubmittedMetricsEvents = self.numSubmittedMetricsEvents + 1
self.tickTime = 0 self.tickTime = 0
end end

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -8,7 +8,7 @@ To contribute, please review our [Code of Conduct](https://github.com/o3de/o3de/
## Making contributions with the Developer Certificate of Origin (DCO) ## Making contributions with the Developer Certificate of Origin (DCO)
When contributing, your pull requests will require that you have agreed to our DCO found here: [Devloper Certificate of Origin](https://developercertificate.org/) When contributing, your pull requests will require that you have agreed to our DCO found here: [Developer Certificate of Origin](https://developercertificate.org/). All commits require the --signoff flag to show DCO compliance.
You can do this by using the -s option in git. You can do this by using the -s option in git.
Example: ```git commit -s -m 'my commit message'``` Example: ```git commit -s -m 'my commit message'```

@ -54,10 +54,9 @@ private:
AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
static XmlNodeRef m_node; static XmlNodeRef m_node;
AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
static QString m_title; static QString m_title;
static QVariant s_pendingPut; static QVariant s_pendingPut;
AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
QWidget* m_parent; QWidget* m_parent;
QTimer m_putDebounce; QTimer m_putDebounce;

@ -16,6 +16,7 @@
#include <AzToolsFramework/Entity/SliceEditorEntityOwnershipServiceBus.h> #include <AzToolsFramework/Entity/SliceEditorEntityOwnershipServiceBus.h>
#include <AzCore/Component/Component.h> #include <AzCore/Component/Component.h>
#include <TimeValue.h> #include <TimeValue.h>
#include <IEditor.h>
#endif #endif
class CClouds; class CClouds;

@ -15,6 +15,7 @@
#pragma once #pragma once
#include <vector> #include <vector>
#include <QtCore/QString>
#define DEFINE_UUID(l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ #define DEFINE_UUID(l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
static const GUID uuid() { return { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }; } static const GUID uuid() { return { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }; }
@ -69,7 +70,6 @@ enum
#include "SandboxAPI.h" #include "SandboxAPI.h"
class QObject; class QObject;
class QString;
//! System class IDs //! System class IDs
@ -121,19 +121,9 @@ struct IClassDesc
//! create panel. //! create panel.
virtual QString Category() = 0; virtual QString Category() = 0;
#ifdef QSTRING_H
virtual QString MenuSuggestion() { return QString(); } virtual QString MenuSuggestion() { return QString(); }
virtual QString Tooltip() { return QString(); } virtual QString Tooltip() { return QString(); }
virtual QString Description() { return QString(); } virtual QString Description() { return QString(); }
#else
//! This method returns the desired menu in which this plugin class would like to be placed in the editor.
//! It is up to the editor to determine if it can and wants to fulfill this request.
virtual QString MenuSuggestion();
//! This method returns the tooltip for the pane
virtual QString Tooltip();
//! This method returns the description for the pane
virtual QString Description();
#endif
//! This method returns if the plugin should have a menu item for its pane. //! This method returns if the plugin should have a menu item for its pane.
virtual bool ShowInMenu() const { return true; } virtual bool ShowInMenu() const { return true; }

@ -15,6 +15,8 @@ struct IStatObj;
struct IMaterial; struct IMaterial;
class CBitmap; class CBitmap;
class QImage;
// Note: values are used as array indices // Note: values are used as array indices
enum EStatObject enum EStatObject
{ {

@ -11,6 +11,10 @@
#define CRYINCLUDE_EDITOR_INCLUDE_IOBJECTMANAGER_H #define CRYINCLUDE_EDITOR_INCLUDE_IOBJECTMANAGER_H
#pragma once #pragma once
#include <AzCore/PlatformIncl.h>
#include <CryCommon/platform.h>
#include <CryCommon/Cry_Geo.h>
// forward declarations. // forward declarations.
class CEntityObject; class CEntityObject;
struct DisplayContext; struct DisplayContext;
@ -24,6 +28,8 @@ class CViewport;
struct HitContext; struct HitContext;
enum class ImageRotationDegrees; enum class ImageRotationDegrees;
struct IStatObj; struct IStatObj;
class CBaseObject;
class XmlNodeRef;
#include "ObjectEvent.h" #include "ObjectEvent.h"

@ -11,6 +11,7 @@
#if !defined(Q_MOC_RUN) #if !defined(Q_MOC_RUN)
#include <AzCore/std/smart_ptr/shared_ptr.h> #include <AzCore/std/smart_ptr/shared_ptr.h>
#include <AzCore/Component/Component.h> #include <AzCore/Component/Component.h>
#include <AzCore/EBus/Event.h>
#include <QComboBox> #include <QComboBox>
#include <QMainWindow> #include <QMainWindow>

@ -31,6 +31,7 @@ struct IRenderAuxGeom;
struct IIconManager; struct IIconManager;
class CDisplaySettings; class CDisplaySettings;
class CCamera; class CCamera;
class QPoint;
enum DisplayFlags enum DisplayFlags
{ {

@ -13,6 +13,7 @@
#include "IEditor.h" #include "IEditor.h"
#include "Include/IIconManager.h" #include "Include/IIconManager.h"
#include "Include/IDisplayViewport.h" #include "Include/IDisplayViewport.h"
#include <Editor/Util/EditorUtils.h>
#include <QDateTime> #include <QDateTime>
#include <QPoint> #include <QPoint>

@ -20,6 +20,8 @@ class CBaseObject;
#include "ObjectEvent.h" #include "ObjectEvent.h"
#include "Objects/BaseObject.h" #include "Objects/BaseObject.h"
#include <Editor/EditorDefs.h>
/*! /*!
* CSelectionGroup is a named selection group of objects. * CSelectionGroup is a named selection group of objects.
*/ */

@ -6,7 +6,6 @@
* *
*/ */
#include "ComponentEntityEditorPlugin_precompiled.h"
#include "ComponentEntityEditorPlugin.h" #include "ComponentEntityEditorPlugin.h"
#include <LyViewPaneNames.h> #include <LyViewPaneNames.h>

@ -1,33 +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 <AzCore/PlatformDef.h>
/////////////////////////////////////////////////////////////////////////////
// Engine
/////////////////////////////////////////////////////////////////////////////
#include <Cry_Math.h>
#include <ISystem.h>
#include <ISerialize.h>
#include <CryName.h>
#include <EditorDefs.h>
#include <Resource.h>
/////////////////////////////////////////////////////////////////////////////
// STL
/////////////////////////////////////////////////////////////////////////////
#include <vector>
#include <list>
#include <map>
#include <set>
#include <algorithm>
#ifdef CreateDirectory
#undef CreateDirectory
#endif

@ -6,8 +6,6 @@
* *
*/ */
#include "ComponentEntityEditorPlugin_precompiled.h"
#include "ComponentEntityObject.h" #include "ComponentEntityObject.h"

@ -5,8 +5,6 @@
* SPDX-License-Identifier: Apache-2.0 OR MIT * SPDX-License-Identifier: Apache-2.0 OR MIT
* *
*/ */
#include "ComponentEntityEditorPlugin_precompiled.h"
#include "SandboxIntegration.h" #include "SandboxIntegration.h"
#include <AzCore/Component/ComponentApplicationBus.h> #include <AzCore/Component/ComponentApplicationBus.h>
@ -83,6 +81,7 @@
#include <Editor/StringDlg.h> #include <Editor/StringDlg.h>
#include <Editor/QtViewPaneManager.h> #include <Editor/QtViewPaneManager.h>
#include <Editor/EditorViewportSettings.h> #include <Editor/EditorViewportSettings.h>
#include <Editor/Util/PathUtil.h>
#include <IResourceSelectorHost.h> #include <IResourceSelectorHost.h>
#include "CryEdit.h" #include "CryEdit.h"

@ -6,8 +6,6 @@
* *
*/ */
#include "ComponentEntityEditorPlugin_precompiled.h"
#include <AzCore/Component/TransformBus.h> #include <AzCore/Component/TransformBus.h>
#include <AzCore/UnitTest/TestTypes.h> #include <AzCore/UnitTest/TestTypes.h>
#include <AzTest/AzTest.h> #include <AzTest/AzTest.h>

@ -6,15 +6,11 @@
* *
*/ */
#include "ComponentEntityEditorPlugin_precompiled.h"
#include <AzTest/AzTest.h> #include <AzTest/AzTest.h>
#include <AzCore/Memory/SystemAllocator.h> #include <AzCore/Memory/SystemAllocator.h>
#include <QApplication> #include <QApplication>
using namespace AZ;
// Handle asserts // Handle asserts
class ToolsFrameworkHook class ToolsFrameworkHook
: public AZ::Test::ITestEnvironment : public AZ::Test::ITestEnvironment
@ -22,12 +18,12 @@ class ToolsFrameworkHook
public: public:
void SetupEnvironment() override void SetupEnvironment() override
{ {
AllocatorInstance<SystemAllocator>::Create(); AZ::AllocatorInstance<AZ::SystemAllocator>::Create();
} }
void TeardownEnvironment() override void TeardownEnvironment() override
{ {
AllocatorInstance<SystemAllocator>::Destroy(); AZ::AllocatorInstance<AZ::SystemAllocator>::Destroy();
} }
}; };

@ -6,8 +6,7 @@
* *
*/ */
#include "ComponentEntityEditorPlugin_precompiled.h" #include <EditorDefs.h>
#include "CryEdit.h" #include "CryEdit.h"
#include "AssetCatalogModel.h" #include "AssetCatalogModel.h"
#include "Objects/ComponentEntityObject.h" #include "Objects/ComponentEntityObject.h"

@ -6,8 +6,6 @@
* *
*/ */
#include "ComponentEntityEditorPlugin_precompiled.h"
#include "CategoriesList.h" #include "CategoriesList.h"
ComponentCategoryList::ComponentCategoryList(QWidget* parent /*= nullptr*/) ComponentCategoryList::ComponentCategoryList(QWidget* parent /*= nullptr*/)

@ -6,8 +6,6 @@
* *
*/ */
#include "ComponentEntityEditorPlugin_precompiled.h"
#include "ComponentDataModel.h" #include "ComponentDataModel.h"
#include "Include/IObjectManager.h" #include "Include/IObjectManager.h"

@ -6,8 +6,6 @@
* *
*/ */
#include "ComponentEntityEditorPlugin_precompiled.h"
#include "ComponentPaletteWindow.h" #include "ComponentPaletteWindow.h"
#include "ComponentDataModel.h" #include "ComponentDataModel.h"
#include "FavoriteComponentList.h" #include "FavoriteComponentList.h"
@ -27,6 +25,7 @@
#include <AzToolsFramework/API/ViewPaneOptions.h> #include <AzToolsFramework/API/ViewPaneOptions.h>
#include <QLabel> #include <QLabel>
#include <QKeyEvent>
ComponentPaletteWindow::ComponentPaletteWindow(QWidget* parent) ComponentPaletteWindow::ComponentPaletteWindow(QWidget* parent)
: QMainWindow(parent) : QMainWindow(parent)

@ -9,7 +9,9 @@
#pragma once #pragma once
#if !defined(Q_MOC_RUN) #if !defined(Q_MOC_RUN)
#include <AzCore/PlatformIncl.h>
#include <QMainWindow> #include <QMainWindow>
#include <AzCore/Math/Guid.h>
#endif #endif
namespace AzToolsFramework namespace AzToolsFramework

@ -6,8 +6,6 @@
* *
*/ */
#include "ComponentEntityEditorPlugin_precompiled.h"
#include "FavoriteComponentList.h" #include "FavoriteComponentList.h"
#include <AzCore/Serialization/SerializeContext.h> #include <AzCore/Serialization/SerializeContext.h>
#include <AzCore/Serialization/EditContext.h> #include <AzCore/Serialization/EditContext.h>

@ -6,8 +6,6 @@
* *
*/ */
#include "ComponentEntityEditorPlugin_precompiled.h"
#include "ComponentDataModel.h" #include "ComponentDataModel.h"
#include "FavoriteComponentList.h" #include "FavoriteComponentList.h"
#include "FilteredComponentList.h" #include "FilteredComponentList.h"

@ -6,8 +6,6 @@
* *
*/ */
#include "ComponentEntityEditorPlugin_precompiled.h"
#include "InformationPanel.h" #include "InformationPanel.h"
// TODO: LMBR-28174 // TODO: LMBR-28174

@ -5,8 +5,6 @@
* SPDX-License-Identifier: Apache-2.0 OR MIT * SPDX-License-Identifier: Apache-2.0 OR MIT
* *
*/ */
#include "ComponentEntityEditorPlugin_precompiled.h"
#include "OutlinerDisplayOptionsMenu.h" #include "OutlinerDisplayOptionsMenu.h"
#include <QIcon> #include <QIcon>

@ -5,8 +5,6 @@
* SPDX-License-Identifier: Apache-2.0 OR MIT * SPDX-License-Identifier: Apache-2.0 OR MIT
* *
*/ */
#include "ComponentEntityEditorPlugin_precompiled.h"
#include "OutlinerListModel.hxx" #include "OutlinerListModel.hxx"
#include <QtCore/QMimeData> #include <QtCore/QMimeData>
@ -65,6 +63,7 @@
#include <Editor/CryEditDoc.h> #include <Editor/CryEditDoc.h>
#include <AzCore/Outcome/Outcome.h> #include <AzCore/Outcome/Outcome.h>
#include <Editor/Util/PathUtil.h>
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
// OutlinerListModel // OutlinerListModel

@ -5,10 +5,9 @@
* SPDX-License-Identifier: Apache-2.0 OR MIT * SPDX-License-Identifier: Apache-2.0 OR MIT
* *
*/ */
#include "ComponentEntityEditorPlugin_precompiled.h"
#include "OutlinerSearchWidget.h" #include "OutlinerSearchWidget.h"
#include <AzCore/Casting/numeric_cast.h>
#include <AzQtComponents/Components/FlowLayout.h> #include <AzQtComponents/Components/FlowLayout.h>
#include <AzQtComponents/Components/StyleManager.h> #include <AzQtComponents/Components/StyleManager.h>
#include <QLabel> #include <QLabel>
@ -16,6 +15,7 @@
#include <QTextDocument> #include <QTextDocument>
#include <QPainter> #include <QPainter>
#include <QToolButton> #include <QToolButton>
#include <QApplication>
namespace AzQtComponents namespace AzQtComponents
{ {

@ -19,6 +19,7 @@
#if !defined(DEFINED_QMETATYPE_UUID) #if !defined(DEFINED_QMETATYPE_UUID)
#define DEFINED_QMETATYPE_UUID #define DEFINED_QMETATYPE_UUID
#include <AzCore/Math/Uuid.h>
Q_DECLARE_METATYPE(AZ::Uuid); Q_DECLARE_METATYPE(AZ::Uuid);
#endif #endif

@ -5,8 +5,6 @@
* SPDX-License-Identifier: Apache-2.0 OR MIT * SPDX-License-Identifier: Apache-2.0 OR MIT
* *
*/ */
#include "ComponentEntityEditorPlugin_precompiled.h"
#include "OutlinerSortFilterProxyModel.hxx" #include "OutlinerSortFilterProxyModel.hxx"
#include <AzCore/Component/ComponentApplication.h> #include <AzCore/Component/ComponentApplication.h>

@ -5,8 +5,6 @@
* SPDX-License-Identifier: Apache-2.0 OR MIT * SPDX-License-Identifier: Apache-2.0 OR MIT
* *
*/ */
#include "ComponentEntityEditorPlugin_precompiled.h"
#include "OutlinerTreeView.hxx" #include "OutlinerTreeView.hxx"
#include "OutlinerListModel.hxx" #include "OutlinerListModel.hxx"
@ -19,6 +17,7 @@
#include <QDrag> #include <QDrag>
#include <QPainter> #include <QPainter>
#include <QHeaderView> #include <QHeaderView>
#include <QMouseEvent>
OutlinerTreeView::OutlinerTreeView(QWidget* pParent) OutlinerTreeView::OutlinerTreeView(QWidget* pParent)
: QTreeView(pParent) : QTreeView(pParent)

@ -5,8 +5,8 @@
* SPDX-License-Identifier: Apache-2.0 OR MIT * SPDX-License-Identifier: Apache-2.0 OR MIT
* *
*/ */
#include "ComponentEntityEditorPlugin_precompiled.h"
#include <CryCommon/platform.h>
#include "MainWindow.h" // for MainWindow #include "MainWindow.h" // for MainWindow
#include "OutlinerListModel.hxx" #include "OutlinerListModel.hxx"

@ -6,8 +6,6 @@
* *
*/ */
#include "ComponentEntityEditorPlugin_precompiled.h"
#include "UI/QComponentEntityEditorMainWindow.h" #include "UI/QComponentEntityEditorMainWindow.h"
#include <AzCore/Component/Entity.h> #include <AzCore/Component/Entity.h>

@ -11,6 +11,8 @@
#include <QMainWindow> #include <QMainWindow>
#include <AzCore/Serialization/SerializeContext.h> #include <AzCore/Serialization/SerializeContext.h>
#include <CryCommon/ISystem.h>
#endif #endif
class QObjectPropertyModel; class QObjectPropertyModel;

@ -6,8 +6,7 @@
* *
*/ */
#include "ComponentEntityEditorPlugin_precompiled.h" #include <EditorDefs.h>
#include "CryEdit.h" #include "CryEdit.h"
#include "UI/QComponentEntityEditorOutlinerWindow.h" #include "UI/QComponentEntityEditorOutlinerWindow.h"
#include "UI/Outliner/OutlinerWidget.hxx" #include "UI/Outliner/OutlinerWidget.hxx"

@ -6,8 +6,6 @@
* *
*/ */
#include "ComponentEntityEditorPlugin_precompiled.h"
#include "UI/QComponentLevelEntityEditorMainWindow.h" #include "UI/QComponentLevelEntityEditorMainWindow.h"
#include <AzCore/Component/Entity.h> #include <AzCore/Component/Entity.h>

@ -12,7 +12,6 @@ set(FILES
ComponentEntityEditorPlugin.cpp ComponentEntityEditorPlugin.cpp
SandboxIntegration.h SandboxIntegration.h
SandboxIntegration.cpp SandboxIntegration.cpp
ComponentEntityEditorPlugin_precompiled.h
UI/QComponentEntityEditorMainWindow.h UI/QComponentEntityEditorMainWindow.h
UI/QComponentEntityEditorMainWindow.cpp UI/QComponentEntityEditorMainWindow.cpp
UI/QComponentLevelEntityEditorMainWindow.h UI/QComponentLevelEntityEditorMainWindow.h

@ -6,15 +6,6 @@
* *
*/ */
#include "ComponentEntityEditorPlugin_precompiled.h"
// All plugins suffer from the following warning:
// warning C4273: 'GetIEditor' : inconsistent dll linkage
// GetIEditor() is forward-declared using EDITOR_CORE_API, which without EDITOR_CORE set,
// results in dllimport rather than dllexport. This define ensure it's consistently and
// properly defined for export.
#define EDITOR_CORE
#include <platform.h> #include <platform.h>
#include <IEditor.h> #include <IEditor.h>

@ -6,7 +6,6 @@
* *
*/ */
#include "EditorAssetImporter_precompiled.h"
#include <AssetBrowserContextProvider.h> #include <AssetBrowserContextProvider.h>
#include <AssetImporterPlugin.h> #include <AssetImporterPlugin.h>
#include <QtCore/QMimeData> #include <QtCore/QMimeData>

@ -6,7 +6,6 @@
* *
*/ */
#include "EditorAssetImporter_precompiled.h"
#include <AssetImporterDocument.h> #include <AssetImporterDocument.h>
#include <AzToolsFramework/Debug/TraceContext.h> #include <AzToolsFramework/Debug/TraceContext.h>
#include <SceneAPI/SceneCore/Export/MtlMaterialExporter.h> #include <SceneAPI/SceneCore/Export/MtlMaterialExporter.h>

@ -6,7 +6,6 @@
* *
*/ */
#include "EditorAssetImporter_precompiled.h"
#include <AssetImporterPlugin.h> #include <AssetImporterPlugin.h>
#include <AssetImporterWindow.h> #include <AssetImporterWindow.h>
#include <QtViewPaneManager.h> #include <QtViewPaneManager.h>

@ -6,7 +6,6 @@
* *
*/ */
#include "EditorAssetImporter_precompiled.h"
#include <AssetImporterWindow.h> #include <AssetImporterWindow.h>
#include <ui_AssetImporterWindow.h> #include <ui_AssetImporterWindow.h>
#include <AssetImporterPlugin.h> #include <AssetImporterPlugin.h>

@ -15,10 +15,12 @@
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
#if !defined(Q_MOC_RUN) #if !defined(Q_MOC_RUN)
#include <AzCore/PlatformIncl.h>
#include <QMainWindow> #include <QMainWindow>
#include <AssetImporterDocument.h> #include <AssetImporterDocument.h>
#include <AzCore/std/smart_ptr/shared_ptr.h> #include <AzCore/std/smart_ptr/shared_ptr.h>
#include <AzCore/std/smart_ptr/unique_ptr.h> #include <AzCore/std/smart_ptr/unique_ptr.h>
#include <AzCore/Math/Guid.h>
#endif #endif
namespace AZStd namespace AZStd

@ -6,7 +6,6 @@
* *
*/ */
#include "EditorAssetImporter_precompiled.h"
#include <ImporterRootDisplay.h> #include <ImporterRootDisplay.h>
#include <ui_ImporterRootDisplay.h> #include <ui_ImporterRootDisplay.h>

@ -12,14 +12,10 @@
// //
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
#include "EditorAssetImporter_precompiled.h"
#include "AssetImporterPlugin.h" #include "AssetImporterPlugin.h"
#if defined(AZ_PLATFORM_WINDOWS) #include <AzCore/PlatformIncl.h>
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#endif
#include <AzCore/Memory/SystemAllocator.h> #include <AzCore/Memory/SystemAllocator.h>
PLUGIN_API IPlugin* CreatePluginInstance(PLUGIN_INIT_PARAM* pInitParam) PLUGIN_API IPlugin* CreatePluginInstance(PLUGIN_INIT_PARAM* pInitParam)

@ -6,7 +6,6 @@
* *
*/ */
#include "EditorAssetImporter_precompiled.h"
#include <AzCore/IO/SystemFile.h> #include <AzCore/IO/SystemFile.h>
#include <AzCore/std/algorithm.h> #include <AzCore/std/algorithm.h>
#include <AzCore/std/string/conversions.h> #include <AzCore/std/string/conversions.h>

@ -20,7 +20,6 @@ set(FILES
SceneSerializationHandler.h SceneSerializationHandler.h
SceneSerializationHandler.cpp SceneSerializationHandler.cpp
Main.cpp Main.cpp
EditorAssetImporter_precompiled.h
AssetImporter.qrc AssetImporter.qrc
AssetImporterWindow.ui AssetImporterWindow.ui
ImporterRootDisplay.ui ImporterRootDisplay.ui

@ -6,7 +6,6 @@
* *
*/ */
#include "EditorCommon_precompiled.h"
#include <ActionOutput.h> #include <ActionOutput.h>
#include <QWidget> #include <QWidget>

@ -7,5 +7,4 @@
*/ */
#include "EditorCommon_precompiled.h"
#include "../../Editor/RenderHelpers/AxisHelperShared.inl" #include "../../Editor/RenderHelpers/AxisHelperShared.inl"

@ -6,6 +6,4 @@
* *
*/ */
#include "EditorCommon_precompiled.h"
#include "../../Editor/Objects/DisplayContextShared.inl" #include "../../Editor/Objects/DisplayContextShared.inl"

@ -7,7 +7,6 @@
*/ */
#include "EditorCommon_precompiled.h"
#include "Ruler.h" #include "Ruler.h"
#include <QPainter> #include <QPainter>
@ -44,7 +43,7 @@ namespace DrawingPrimitives
const float ticksMinPower = log10f(RULER_MIN_PIXELS_PER_TICK); const float ticksMinPower = log10f(RULER_MIN_PIXELS_PER_TICK);
const float ticksPowerDelta = ticksMinPower - log10f(pixelsPerUnit); const float ticksPowerDelta = ticksMinPower - log10f(pixelsPerUnit);
const int digitsAfterPoint = max(-int(ceil(ticksPowerDelta)) - 1, 0); const int digitsAfterPoint = AZStd::max(-int(ceil(ticksPowerDelta)) - 1, 0);
if (pRulerPrecision) if (pRulerPrecision)
{ {
*pRulerPrecision = digitsAfterPoint; *pRulerPrecision = digitsAfterPoint;
@ -160,7 +159,7 @@ namespace DrawingPrimitives
char format[16] = ""; char format[16] = "";
sprintf_s(format, "%%.%df", rulerPrecision); azsprintf(format, "%%.%df", rulerPrecision);
const int height = options.m_rect.height(); const int height = options.m_rect.height();
const int top = options.m_rect.top(); const int top = options.m_rect.top();

@ -7,7 +7,6 @@
*/ */
#include "EditorCommon_precompiled.h"
#include "TimeSlider.h" #include "TimeSlider.h"
#include <QPainter> #include <QPainter>

@ -5,13 +5,14 @@
* SPDX-License-Identifier: Apache-2.0 OR MIT * SPDX-License-Identifier: Apache-2.0 OR MIT
* *
*/ */
#include "EditorCommon_precompiled.h"
#include <platform.h> #include <platform.h>
#include "EditorCommon.h" #include "EditorCommon.h"
#include "EditorCommonAPI.h" #include "EditorCommonAPI.h"
#include <CryCommon/ISystem.h>
CEditorCommonApp::CEditorCommonApp() CEditorCommonApp::CEditorCommonApp()
{ {
} }

@ -1,22 +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
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN
#endif
// These redicilous dependencies are needed just to be able to use
// Sandbox gizmos drawing and hit-testing code =(
#include "ISystem.h"
#include "Include/EditorCoreAPI.h"
#include "Util/EditorUtils.h"

@ -7,7 +7,6 @@
*/ */
#include "EditorCommon_precompiled.h"
#include "platform.h" #include "platform.h"
#pragma warning(disable: 4266) // disabled warning from afk overrides #pragma warning(disable: 4266) // disabled warning from afk overrides

@ -6,7 +6,6 @@
* *
*/ */
#include "EditorCommon_precompiled.h"
#include <SaveUtilities/AsyncSaveRunner.h> #include <SaveUtilities/AsyncSaveRunner.h>
#include <AzToolsFramework/SourceControl/SourceControlAPI.h> #include <AzToolsFramework/SourceControl/SourceControlAPI.h>
#include <AzCore/IO/SystemFile.h> #include <AzCore/IO/SystemFile.h>

@ -6,7 +6,6 @@
* *
*/ */
#include "EditorCommon_precompiled.h"
#include <WinWidget/WinWidgetManager.h> #include <WinWidget/WinWidgetManager.h>
namespace WinWidget namespace WinWidget

@ -14,6 +14,8 @@
#include <vector> #include <vector>
#include <functional> #include <functional>
class QWidget;
namespace WinWidget namespace WinWidget
{ {
class EDITOR_COMMON_API WinWidgetManager class EDITOR_COMMON_API WinWidgetManager

@ -11,7 +11,6 @@ set(FILES
EditorCommon.cpp EditorCommon.cpp
EditorCommon.rc EditorCommon.rc
EditorCommonAPI.h EditorCommonAPI.h
EditorCommon_precompiled.h
ActionOutput.h ActionOutput.h
ActionOutput.cpp ActionOutput.cpp
UiEditorDLLBus.h UiEditorDLLBus.h

@ -1,14 +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
*
*/
// stdafx.cpp : source file that includes just the standard includes
// EditorCommon.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
#include "EditorCommon_precompiled.h"

@ -7,7 +7,6 @@
*/ */
#include "FFMPEGPlugin_precompiled.h"
#include "FFMPEGPlugin.h" #include "FFMPEGPlugin.h"
#include "CryString.h" #include "CryString.h"
typedef CryStringT<char> string; typedef CryStringT<char> string;

@ -1,25 +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 <AzCore/PlatformDef.h>
#include "resource.h"
/////////////////////////////////////////////////////////////////////////////
// CRY Stuff ////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
#include <platform.h>
/////////////////////////////////////////////////////////////////////////////
// CRY Stuff ////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
#include <ISystem.h>
#include "EditorCoreAPI.h"

@ -9,7 +9,6 @@
set(FILES set(FILES
FFMPEGPlugin.rc FFMPEGPlugin.rc
main.cpp main.cpp
FFMPEGPlugin_precompiled.h
FFMPEGPlugin.cpp FFMPEGPlugin.cpp
FFMPEGPlugin.h FFMPEGPlugin.h
) )

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save