aboutsummaryrefslogtreecommitdiff
path: root/tools/ArtistTools/source
diff options
context:
space:
mode:
authorAnton Novoselov <[email protected]>2017-08-08 20:14:22 +0300
committerAnton Novoselov <[email protected]>2017-08-08 20:14:22 +0300
commitd41654b469fa51870b5952c836c04d9da17f32d3 (patch)
tree64f8f437eef394630355f281d35ca1d53e5c4d6c /tools/ArtistTools/source
parentadd +x for packman script (diff)
downloadblast-d41654b469fa51870b5952c836c04d9da17f32d3.tar.xz
blast-d41654b469fa51870b5952c836c04d9da17f32d3.zip
Updated to CL 22627414:
* docs updates * authoring fixes * stress solver crash fixes
Diffstat (limited to 'tools/ArtistTools/source')
-rw-r--r--tools/ArtistTools/source/BlastPlugin/BlastPlugin.cpp26
-rw-r--r--tools/ArtistTools/source/BlastPlugin/Parameters/BlastProjectParams.pl17
-rw-r--r--tools/ArtistTools/source/BlastPlugin/Parameters/HackNvParamBug.cpp2
-rw-r--r--tools/ArtistTools/source/BlastPlugin/Parameters/ProjectParams.cpp7
-rw-r--r--tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastAssetModel.cpp40
-rw-r--r--tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastFamilyModelSimple.cpp7
-rw-r--r--tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastFractureTool.cpp34
-rw-r--r--tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastFractureTool.h4
-rw-r--r--tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastModel.cpp64
-rw-r--r--tools/ArtistTools/source/BlastPlugin/SampleBase/core/SampleManager.cpp183
-rw-r--r--tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Mesh.h1
-rw-r--r--tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/RenderMaterial.cpp2
-rw-r--r--tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderable.cpp9
-rw-r--r--tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderer.cpp83
-rw-r--r--tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderer.h6
-rw-r--r--tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/ResourceManager.cpp2
-rw-r--r--tools/ArtistTools/source/BlastPlugin/Shaders/common_buffers_ex.hlsl3
-rw-r--r--tools/ArtistTools/source/BlastPlugin/Shaders/model_simple_textured_ex.hlsl56
-rw-r--r--tools/ArtistTools/source/BlastPlugin/UI/FileReferencesPanel.ui103
-rw-r--r--tools/ArtistTools/source/BlastPlugin/Window/FileReferencesPanel.cpp326
-rw-r--r--tools/ArtistTools/source/BlastPlugin/Window/FileReferencesPanel.h9
21 files changed, 465 insertions, 519 deletions
diff --git a/tools/ArtistTools/source/BlastPlugin/BlastPlugin.cpp b/tools/ArtistTools/source/BlastPlugin/BlastPlugin.cpp
index 582a5e5..4890dbf 100644
--- a/tools/ArtistTools/source/BlastPlugin/BlastPlugin.cpp
+++ b/tools/ArtistTools/source/BlastPlugin/BlastPlugin.cpp
@@ -72,7 +72,8 @@
#include "SelectionToolController.h"
#include "GizmoToolController.h"
#include <QtCore/QTimer>
-
+#include "NvBlastExtAuthoring.h"
+#include "ResourceManager.h"
const float tolenrance = 10e-6;
QTimer gPlayTimer;
@@ -110,8 +111,8 @@ return u + v <= 1;
}
*/
-bool outside(int vc1, int fc1, Vertex* pv1, physx::PxBounds3& b1,
- int vc2, int fc2, Vertex* pv2, physx::PxBounds3& b2)
+bool outside(int vc1, int fc1, const Vertex* pv1, const physx::PxBounds3& b1,
+ int vc2, int fc2, const Vertex* pv2, const physx::PxBounds3& b2)
{
// mesh2 is not a volumn
if (fc2 < 4)
@@ -195,12 +196,12 @@ int contains(Nv::Blast::Mesh* pMesh1, Nv::Blast::Mesh* pMesh2)
int vc1 = pMesh1->getVerticesCount();
int fc1 = pMesh1->getFacetCount();
- Vertex* pv1 = pMesh1->getVertices();
- physx::PxBounds3& b1 = pMesh1->getBoundingBox();
+ const Vertex* pv1 = pMesh1->getVertices();
+ const physx::PxBounds3& b1 = pMesh1->getBoundingBox();
int vc2 = pMesh2->getVerticesCount();
int fc2 = pMesh2->getFacetCount();
- Vertex* pv2 = pMesh2->getVertices();
- physx::PxBounds3& b2 = pMesh2->getBoundingBox();
+ const Vertex* pv2 = pMesh2->getVertices();
+ const physx::PxBounds3& b2 = pMesh2->getBoundingBox();
if (outside(vc1, fc1, pv1, b1, vc2, fc2, pv2, b2))
{
@@ -898,9 +899,11 @@ void BlastPlugin::SimpleScene_OpenFilesByDrop(const QStringList& fileNames)
}
}
bool bUpdateUI = false;
+ ResourceManager* pResourceManager = ResourceManager::ins();
if (projCount == 1)
{
QFileInfo fileInfo(projName);
+ pResourceManager->addSearchDir(fileInfo.absolutePath().toUtf8().data());
GlobalSettings& globalSettings = GlobalSettings::Inst();
globalSettings.m_projectFileDir = fileInfo.absolutePath().toUtf8().data();
globalSettings.m_projectFileName = fileInfo.fileName().toUtf8().data();
@@ -910,12 +913,14 @@ void BlastPlugin::SimpleScene_OpenFilesByDrop(const QStringList& fileNames)
else if (fbxCount == 1)
{
QFileInfo fileInfo(fbxName);
+ pResourceManager->addSearchDir(fileInfo.absolutePath().toUtf8().data());
SimpleScene_LoadSceneFromFbx(fileInfo.absolutePath().toUtf8().data(), fileInfo.fileName().toUtf8().data());
bUpdateUI = true;
}
else if (bpxaCount == 1)
{
QFileInfo fileInfo(bpxaName);
+ pResourceManager->addSearchDir(fileInfo.absolutePath().toUtf8().data());
OpenBpxa(fileInfo.absolutePath().toUtf8().data(), fileInfo.fileName().toUtf8().data());
bUpdateUI = true;
}
@@ -1173,7 +1178,7 @@ bool BlastPlugin::SimpleScene_LoadSceneFromFbx(const char* d, const char* f)
physx::PxVec3* nr = (!normals.empty()) ? normals.data() : 0;
physx::PxVec2* uvp = (!uv.empty()) ? uv.data() : 0;
- Nv::Blast::Mesh* pMesh = new Nv::Blast::Mesh(positions.data(), nr, uvp, static_cast<uint32_t>(positions.size()),
+ Nv::Blast::Mesh* pMesh = NvBlastExtAuthoringCreateMesh(positions.data(), nr, uvp, static_cast<uint32_t>(positions.size()),
indices.data(), static_cast<uint32_t>(indices.size()));
meshes[nm] = pMesh;
@@ -1504,11 +1509,12 @@ bool BlastPlugin::SimpleScene_LoadParameters(NvParameterized::Interface* iface)
physx::PxVec3* nr = (!normals.empty()) ? normals.data() : 0;
physx::PxVec2* uvp = (!uv.empty()) ? uv.data() : 0;
- Nv::Blast::Mesh* pMesh = new Nv::Blast::Mesh(positions.data(), nr, uvp, static_cast<uint32_t>(positions.size()),
+ Nv::Blast::Mesh* pMesh = NvBlastExtAuthoringCreateMesh(positions.data(), nr, uvp, static_cast<uint32_t>(positions.size()),
indices.data(), static_cast<uint32_t>(indices.size()));
for (uint32_t nf = 0; nf < numFaces; nf++)
{
- pMesh->getFacet(nf)->userData = materialIDArray.buf[nf];
+ Facet* pFacet = const_cast<Facet*>(pMesh->getFacet(nf));
+ pFacet->materialId = materialIDArray.buf[nf];
}
meshes.push_back(pMesh);
diff --git a/tools/ArtistTools/source/BlastPlugin/Parameters/BlastProjectParams.pl b/tools/ArtistTools/source/BlastPlugin/Parameters/BlastProjectParams.pl
index bb22204..ad959ec 100644
--- a/tools/ArtistTools/source/BlastPlugin/Parameters/BlastProjectParams.pl
+++ b/tools/ArtistTools/source/BlastPlugin/Parameters/BlastProjectParams.pl
@@ -1060,26 +1060,21 @@
hints => { shortDescription => "Is this blast asset export FBX" },
},
{
- name => 'obj',
- type => 'STRING',
- hints => { shortDescription => "OBJ export asset path" },
- },
- {
- name => 'exportOBJ',
+ name => 'embedFBXCollision',
type => 'BOOL',
defaultValue => 'false',
- hints => { shortDescription => "Is this blast asset export OBJ" },
+ hints => { shortDescription => "Whether embed collisio in export FBX" },
},
{
- name => 'collision',
+ name => 'obj',
type => 'STRING',
- hints => { shortDescription => "Collision export asset path" },
+ hints => { shortDescription => "OBJ export asset path" },
},
{
- name => 'exportCollision',
+ name => 'exportOBJ',
type => 'BOOL',
defaultValue => 'false',
- hints => { shortDescription => "Is this blast asset export Collision" },
+ hints => { shortDescription => "Is this blast asset export OBJ" },
},
{
name => 'llasset',
diff --git a/tools/ArtistTools/source/BlastPlugin/Parameters/HackNvParamBug.cpp b/tools/ArtistTools/source/BlastPlugin/Parameters/HackNvParamBug.cpp
index 6017a75..5cd0a32 100644
--- a/tools/ArtistTools/source/BlastPlugin/Parameters/HackNvParamBug.cpp
+++ b/tools/ArtistTools/source/BlastPlugin/Parameters/HackNvParamBug.cpp
@@ -9,6 +9,8 @@ int GetHackElementSize(const char* data)
return sizeof(nvidia::NvVec3);
if (strstr(data, "graphicsMesh.normals") != nullptr)
return sizeof(nvidia::NvVec3);
+ if (strstr(data, "graphicsMesh.tangents") != nullptr)
+ return sizeof(nvidia::NvVec3);
if (strstr(data, "graphicsMesh.texcoords") != nullptr)
return sizeof(nvidia::NvVec2);
if (strstr(data, "graphicsMesh.positionIndexes") != nullptr)
diff --git a/tools/ArtistTools/source/BlastPlugin/Parameters/ProjectParams.cpp b/tools/ArtistTools/source/BlastPlugin/Parameters/ProjectParams.cpp
index ebe8f3d..3f97631 100644
--- a/tools/ArtistTools/source/BlastPlugin/Parameters/ProjectParams.cpp
+++ b/tools/ArtistTools/source/BlastPlugin/Parameters/ProjectParams.cpp
@@ -130,7 +130,6 @@ void freeBlast(BPPAsset& data)
freeString(data.name);
freeString(data.fbx);
freeString(data.obj);
- freeString(data.collision);
freeString(data.llasset);
freeString(data.tkasset);
freeString(data.bpxa);
@@ -732,13 +731,12 @@ void copy(BPPAsset& dest, BPPAsset& source)
copy(dest.activeUserPreset, source.activeUserPreset);
copy(dest.fbx, source.fbx);
copy(dest.obj, source.obj);
- copy(dest.collision, source.collision);
copy(dest.llasset, source.llasset);
copy(dest.tkasset, source.tkasset);
copy(dest.bpxa, source.bpxa);
dest.exportFBX = source.exportFBX;
+ dest.embedFBXCollision = source.embedFBXCollision;
dest.exportOBJ = source.exportOBJ;
- dest.exportCollision = source.exportCollision;
dest.exportLLAsset = source.exportLLAsset;
dest.exportTKAsset = source.exportTKAsset;
dest.exportBPXA = source.exportBPXA;
@@ -1471,13 +1469,12 @@ void init(BPPAsset& param)
init(param.stressSolver);
param.obj.buf = nullptr;
param.fbx.buf = nullptr;
- param.collision.buf = nullptr;
param.llasset.buf = nullptr;
param.tkasset.buf = nullptr;
param.bpxa.buf = nullptr;
param.exportFBX = false;
+ param.embedFBXCollision = true;
param.exportOBJ = false;
- param.exportCollision = false;
param.exportLLAsset = false;
param.exportTKAsset = false;
param.exportBPXA = false;
diff --git a/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastAssetModel.cpp b/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastAssetModel.cpp
index 2c39824..857cb9b 100644
--- a/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastAssetModel.cpp
+++ b/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastAssetModel.cpp
@@ -36,7 +36,7 @@
#include "NvBlastExtPxAsset.h"
#include <sstream>
#include <fstream>
-#include "NvBlastExtExporterFbxReader.h"
+#include "NvBlastExtExporter.h"
#include "PxPhysics.h"
#include <NvBlastGlobals.h>
#include "NvBlastExtAssetUtils.h"
@@ -46,6 +46,8 @@
#include "NvBlastExtLlSerialization.h"
#include "NvBlastExtTkSerialization.h"
#include "NvBlastExtPxSerialization.h"
+#include "NvBlastExtAuthoring.h"
+#include "NvBlastExtAuthoringCollisionBuilder.h"
BlastAssetModel::BlastAssetModel(TkFramework& framework, PxPhysics& physics, PxCooking& cooking, ExtSerialization& serialization, Renderer& renderer, const char* modelName, const char* modelPath)
: BlastAsset(renderer)
@@ -179,27 +181,31 @@ BlastAssetModel::BlastAssetModel(TkFramework& framework, PxPhysics& physics, PxC
path = GlobalSettings::MakeFileName(modelPath, objFileName.str().c_str());
if (QFile::exists(path.c_str()))
{
- FbxFileReader rdr;
- rdr.loadFromFile(path);
- if (rdr.isCollisionLoaded() == 0)
+ std::shared_ptr<IFbxFileReader> rdr(NvBlastExtExporterCreateFbxFileReader(), [](IFbxFileReader* p) {p->release(); });
+ rdr->loadFromFile(path.c_str());
+ if (rdr->isCollisionLoaded() == 0)
{
ASSERT_PRINT(false, "fbx doesn't contain collision geometry");
}
- std::vector<std::vector<CollisionHull> > hulls;
- rdr.getCollision(hulls);
+ uint32_t* hullsOffsets = nullptr;
+ CollisionHull** hulls = nullptr;
+ uint32_t meshCount = rdr->getCollision(hullsOffsets, hulls);
/**
Create physics meshes;
*/
- Nv::Blast::ConvexMeshBuilder collisionBuilder(&cooking, &physics.getPhysicsInsertionCallback());
- physicsChunks.resize(hulls.size());
- physicsSubchunks.resize(hulls.size());
+ std::shared_ptr<Nv::Blast::ConvexMeshBuilder> collisionBuilder(
+ NvBlastExtAuthoringCreateConvexMeshBuilder(&cooking, &physics.getPhysicsInsertionCallback()),
+ [](Nv::Blast::ConvexMeshBuilder* cmb) {cmb->release(); });
- for (uint32_t i = 0; i < hulls.size(); ++i)
+ physicsChunks.resize(meshCount);
+ physicsSubchunks.resize(meshCount);
+
+ for (uint32_t i = 0; i < meshCount; ++i)
{
- for (uint32_t sbHulls = 0; sbHulls < hulls[i].size(); ++sbHulls)
+ for (uint32_t sbHulls = hullsOffsets[i]; sbHulls < hullsOffsets[i+1]; ++sbHulls)
{
- PxConvexMeshGeometry temp = physx::PxConvexMeshGeometry(collisionBuilder.buildConvexMesh(hulls[i][sbHulls]));
+ PxConvexMeshGeometry temp = physx::PxConvexMeshGeometry(collisionBuilder.get()->buildConvexMesh(*hulls[sbHulls]));
if (temp.isValid())
{
physicsSubchunks[i].push_back(ExtPxAssetDesc::SubchunkDesc());
@@ -208,12 +214,20 @@ BlastAssetModel::BlastAssetModel(TkFramework& framework, PxPhysics& physics, PxC
}
}
}
- for (uint32_t i = 0; i < hulls.size(); ++i)
+ for (uint32_t i = 0; i < meshCount; ++i)
{
physicsChunks[i].isStatic = false;
physicsChunks[i].subchunkCount = (uint32_t)physicsSubchunks[i].size();
physicsChunks[i].subchunks = physicsSubchunks[i].data();
}
+ if (hullsOffsets)
+ {
+ NVBLAST_FREE(hullsOffsets);
+ }
+ if (hulls)
+ {
+ NVBLAST_FREE(hulls);
+ }
}
m_pxAsset = ExtPxAsset::create(tkAsset, physicsChunks.data(), (uint32_t)physicsChunks.size());
ASSERT_PRINT(m_pxAsset != nullptr, "can't create asset");
diff --git a/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastFamilyModelSimple.cpp b/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastFamilyModelSimple.cpp
index 01559da..7d2cbe4 100644
--- a/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastFamilyModelSimple.cpp
+++ b/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastFamilyModelSimple.cpp
@@ -162,9 +162,10 @@ public:
m_device = GetDeviceManager()->GetDevice();
m_inputDesc.push_back({ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 });
- m_inputDesc.push_back({ "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 });
- m_inputDesc.push_back({ "TANGENT", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 24, D3D11_INPUT_PER_VERTEX_DATA, 0 });
- m_inputDesc.push_back({ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 36, D3D11_INPUT_PER_VERTEX_DATA, 0 });
+ m_inputDesc.push_back({ "VERTEX_NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 });
+ m_inputDesc.push_back({ "FACE_NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 24, D3D11_INPUT_PER_VERTEX_DATA, 0 });
+ m_inputDesc.push_back({ "TANGENT", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 36, D3D11_INPUT_PER_VERTEX_DATA, 0 });
+ m_inputDesc.push_back({ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 48, D3D11_INPUT_PER_VERTEX_DATA, 0 });
m_inputDesc.push_back({ "TEXCOORD", 1, DXGI_FORMAT_R32_FLOAT, 1, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 });
m_numVertices = static_cast<uint32_t>(mesh->vertices.size());
diff --git a/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastFractureTool.cpp b/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastFractureTool.cpp
index 5051534..cbd299b 100644
--- a/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastFractureTool.cpp
+++ b/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastFractureTool.cpp
@@ -31,7 +31,8 @@
#include <BlastAsset.h>
#include <NvBlastExtPxAsset.h>
#include <NvBlastTkAsset.h>
-
+#include "NvBlastExtAuthoring.h"
+#include "NvBlastExtAuthoringMeshImpl.h"
void BlastFractureTool::free()
{
std::vector<Nv::Blast::Mesh*>::iterator it;
@@ -101,7 +102,7 @@ void BlastFractureTool::setSourceAsset(const BlastAsset* pBlastAsset)
PxVec3* nr = (!normals.empty()) ? normals.data() : 0;
PxVec2* uvp = (!uv.empty()) ? uv.data() : 0;
- Nv::Blast::Mesh* pMesh = new Nv::Blast::Mesh(
+ Nv::Blast::Mesh* pMesh = NvBlastExtAuthoringCreateMesh(
positions.data(), nr, uvp, static_cast<uint32_t>(positions.size()),
ind.data(), static_cast<uint32_t>(ind.size()));
@@ -117,7 +118,8 @@ void BlastFractureTool::setSourceAsset(const BlastAsset* pBlastAsset)
curMaterialIndex = materialIndexes[curFaceIndex];
}
- pMesh->getFacet(fc)->userData = curMaterialIndex;
+ Facet* pFacet = const_cast<Facet*>(pMesh->getFacet(fc));
+ pFacet->materialId = curMaterialIndex;
}
chunkMeshes[cs] = pMesh;
@@ -162,22 +164,24 @@ void BlastFractureTool::setSourceAsset(const BlastAsset* pBlastAsset)
{
if (chunkMeshes[cs] == nullptr)
continue;
- mChunkData[cs].meshData = new Nv::Blast::Mesh(*chunkMeshes[cs]);
+ mChunkData[cs].meshData = new MeshImpl(*reinterpret_cast<const MeshImpl*>(chunkMeshes[cs]));
mChunkData[cs].parent = parentIds[cs];
mChunkData[cs].chunkId = mChunkIdCounter++;
mChunkData[cs].isLeaf = isLeafs[cs];
mesh = mChunkData[cs].meshData;
- Nv::Blast::Vertex* verticesBuffer = mesh->getVertices();
+ Nv::Blast::Vertex* verticesBuffer = const_cast<Nv::Blast::Vertex*>(mesh->getVertices());
for (uint32_t i = 0; i < mesh->getVerticesCount(); ++i)
{
verticesBuffer[i].p = (verticesBuffer[i].p - mOffset) * (1.0f / mScaleFactor);
}
- mesh->getBoundingBox().minimum = (mesh->getBoundingBox().minimum - mOffset) * (1.0f / mScaleFactor);
- mesh->getBoundingBox().maximum = (mesh->getBoundingBox().maximum - mOffset) * (1.0f / mScaleFactor);
+ PxBounds3& bb = const_cast<PxBounds3&>(mesh->getBoundingBox());
+ bb.minimum = (bb.minimum - mOffset) * (1.0f / mScaleFactor);
+ bb.maximum = (bb.maximum - mOffset) * (1.0f / mScaleFactor);
for (uint32_t i = 0; i < mesh->getFacetCount(); ++i)
{
- mesh->getFacet(i)->userData = chunkMeshes[cs]->getFacet(i)->userData;
+ Facet* pFacet = const_cast<Facet*>(mesh->getFacet(i));
+ pFacet->materialId = chunkMeshes[cs]->getFacet(i)->materialId;
}
}
}
@@ -195,7 +199,7 @@ void BlastFractureTool::setSourceMeshes(std::vector<Nv::Blast::Mesh*>& meshes, s
chunkMeshes.resize(chunkSize, nullptr);
for (int cs = 0; cs < chunkSize; cs++)
{
- Nv::Blast::Mesh* pMesh = new Nv::Blast::Mesh(*meshes[cs]);
+ Nv::Blast::Mesh* pMesh = new MeshImpl(*reinterpret_cast<const MeshImpl*>(meshes[cs]));
chunkMeshes[cs] = pMesh;
}
@@ -223,22 +227,24 @@ void BlastFractureTool::setSourceMeshes(std::vector<Nv::Blast::Mesh*>& meshes, s
{
if (chunkMeshes[cs] == nullptr)
continue;
- mChunkData[cs].meshData = new Nv::Blast::Mesh(*chunkMeshes[cs]);
+ mChunkData[cs].meshData = new MeshImpl(*reinterpret_cast<const MeshImpl*>(chunkMeshes[cs]));
mChunkData[cs].parent = parentIds[cs];
mChunkData[cs].chunkId = mChunkIdCounter++;
mChunkData[cs].isLeaf = isLeafs[cs];
mesh = mChunkData[cs].meshData;
- Nv::Blast::Vertex* verticesBuffer = mesh->getVertices();
+ Nv::Blast::Vertex* verticesBuffer = const_cast<Nv::Blast::Vertex*>(mesh->getVertices());
for (uint32_t i = 0; i < mesh->getVerticesCount(); ++i)
{
verticesBuffer[i].p = (verticesBuffer[i].p - mOffset) * (1.0f / mScaleFactor);
}
- mesh->getBoundingBox().minimum = (mesh->getBoundingBox().minimum - mOffset) * (1.0f / mScaleFactor);
- mesh->getBoundingBox().maximum = (mesh->getBoundingBox().maximum - mOffset) * (1.0f / mScaleFactor);
+ PxBounds3& bb = const_cast<PxBounds3&>(mesh->getBoundingBox());
+ bb.minimum = (bb.minimum - mOffset) * (1.0f / mScaleFactor);
+ bb.maximum = (bb.maximum - mOffset) * (1.0f / mScaleFactor);
for (uint32_t i = 0; i < mesh->getFacetCount(); ++i)
{
- mesh->getFacet(i)->userData = chunkMeshes[cs]->getFacet(i)->userData;
+ Facet* pFacet = const_cast<Facet*>(mesh->getFacet(i));
+ pFacet->materialId = chunkMeshes[cs]->getFacet(i)->materialId;
}
}
}
diff --git a/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastFractureTool.h b/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastFractureTool.h
index 42ff78f..3436551 100644
--- a/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastFractureTool.h
+++ b/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastFractureTool.h
@@ -29,7 +29,7 @@
#ifndef BLAST_FRACTURETOOL_H
#define BLAST_FRACTURETOOL_H
-#include "NvBlastExtAuthoringFractureTool.h"
+#include "NvBlastExtAuthoringFractureToolImpl.h"
class BlastAsset;
namespace Nv
@@ -40,7 +40,7 @@ namespace Nv
}
}
-class BlastFractureTool : public Nv::Blast::FractureTool
+class BlastFractureTool : public Nv::Blast::FractureToolImpl
{
public:
BlastFractureTool() {}
diff --git a/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastModel.cpp b/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastModel.cpp
index 1e45003..2f00207 100644
--- a/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastModel.cpp
+++ b/tools/ArtistTools/source/BlastPlugin/SampleBase/blast/BlastModel.cpp
@@ -33,10 +33,25 @@
// Add By Lixu End
#include "tiny_obj_loader.h"
#include "MathUtil.h"
-#include "NvBlastExtExporterFbxReader.h"
+#include "NvBlastExtExporter.h"
+#include "NvBlastGlobals.h"
using namespace physx;
+void computeFacenormalByPosition(
+ physx::PxVec3 p0, physx::PxVec3 p1, physx::PxVec3 p2,
+ physx::PxVec3& facenormal)
+{
+ physx::PxVec3 p01 = p1 - p0;
+ physx::PxVec3 p02 = p2 - p0;
+
+ facenormal.x = p01.y * p02.z - p01.z * p02.y;
+ facenormal.y = p01.z * p02.x - p01.x * p02.z;
+ facenormal.z = p01.x * p02.y - p01.y * p02.x;
+
+ facenormal = -facenormal.getNormalized();
+}
+
void computeTangentByPositionAndTexcoord(
physx::PxVec3 p0, physx::PxVec3 p1, physx::PxVec3 p2,
physx::PxVec2 r0, physx::PxVec2 r1, physx::PxVec2 r2,
@@ -67,14 +82,15 @@ BlastModelPtr BlastModel::loadFromFbxFile(const char* path)
model->bbMax = PxVec3(FLT_MIN, FLT_MIN, FLT_MIN);
// Add By Lixu End
- FbxFileReader rdr;
- rdr.loadFromFile(path);
- if (rdr.getBoneCount() == 0)
+
+ std::shared_ptr<Nv::Blast::IFbxFileReader> rdr(NvBlastExtExporterCreateFbxFileReader(), [](Nv::Blast::IFbxFileReader* p) {p->release(); });
+ rdr->loadFromFile(path);
+ if (rdr->getBoneCount() == 0)
{
return nullptr;
}
- model->chunks.resize(rdr.getBoneCount());
+ model->chunks.resize(rdr->getBoneCount());
model->materials.push_back(BlastModel::Material());
@@ -82,33 +98,33 @@ BlastModelPtr BlastModel::loadFromFbxFile(const char* path)
/**
Produce buffers of appropriate for AssetViewer format
*/
- std::vector<uint32_t> infl;
- rdr.getBoneInfluences(infl);
- for (uint32_t i = 0; i < rdr.getBoneCount(); ++i)
+ uint32_t* infl;
+ rdr->getBoneInfluences(infl);
+ for (uint32_t i = 0; i < rdr->getBoneCount(); ++i)
{
- std::vector<int32_t> indRemap(rdr.getPositionArray().size(), -1);
+ std::vector<int32_t> indRemap(rdr->getVerticesCount(), -1);
std::vector<uint32_t> indices;
SimpleMesh cmesh;
- for (uint32_t j = 0; j < rdr.getPositionArray().size(); ++j)
+ for (uint32_t j = 0; j < rdr->getVerticesCount(); ++j)
{
if (i == infl[j])
{
indRemap[j] = (int32_t)cmesh.vertices.size();
cmesh.vertices.push_back(SimpleMesh::Vertex());
- cmesh.vertices.back().normal = rdr.getNormalsArray()[j];
- cmesh.vertices.back().position = rdr.getPositionArray()[j];
- cmesh.vertices.back().uv = rdr.getUvArray()[j];
+ cmesh.vertices.back().normal = rdr->getNormalsArray()[j];
+ cmesh.vertices.back().position = rdr->getPositionArray()[j];
+ cmesh.vertices.back().uv = rdr->getUvArray()[j];
}
}
- for (uint32_t j = 0; j < rdr.getIndexArray().size(); j += 3)
+ for (uint32_t j = 0; j < rdr->getIdicesCount(); j += 3)
{
- if (i == infl[rdr.getIndexArray()[j]])
+ if (i == infl[rdr->getIndexArray()[j]])
{
- int32_t lind = rdr.getIndexArray()[j + 2];
+ int32_t lind = rdr->getIndexArray()[j + 2];
cmesh.indices.push_back(indRemap[lind]);
- lind = rdr.getIndexArray()[j + 1];
+ lind = rdr->getIndexArray()[j + 1];
cmesh.indices.push_back(indRemap[lind]);
- lind = rdr.getIndexArray()[j];
+ lind = rdr->getIndexArray()[j];
cmesh.indices.push_back(indRemap[lind]);
}
}
@@ -116,6 +132,8 @@ BlastModelPtr BlastModel::loadFromFbxFile(const char* path)
model->chunks[i].meshes.push_back(Chunk::Mesh());
model->chunks[i].meshes.back().materialIndex = 0;
model->chunks[i].meshes.back().mesh = cmesh;
+
+ NVBLAST_FREE(infl);
}
return model;
}
@@ -272,7 +290,7 @@ BlastModelPtr BlastModel::loadFromFileTinyLoader(const char* path)
}
}
- // compute tangent
+ // compute facenormal and tangent
if (pMesh.mesh.indices.size() > 0 && allTriangles)
{
for (uint32_t i = 0; i < pMesh.mesh.indices.size(); i += 3)
@@ -281,6 +299,14 @@ BlastModelPtr BlastModel::loadFromFileTinyLoader(const char* path)
SimpleMesh::Vertex& v1 = chunkMesh.vertices[chunkMesh.indices[i + 1]];
SimpleMesh::Vertex& v2 = chunkMesh.vertices[chunkMesh.indices[i + 2]];
+ physx::PxVec3 facenormal;
+ computeFacenormalByPosition(
+ v0.position, v1.position, v2.position, facenormal);
+
+ v0.facenormal = facenormal;
+ v1.facenormal = facenormal;
+ v2.facenormal = facenormal;
+
physx::PxVec3 tangent;
computeTangentByPositionAndTexcoord(
v0.position, v1.position, v2.position, v0.uv, v1.uv, v2.uv, tangent);
diff --git a/tools/ArtistTools/source/BlastPlugin/SampleBase/core/SampleManager.cpp b/tools/ArtistTools/source/BlastPlugin/SampleBase/core/SampleManager.cpp
index 61a174a..88af3a1 100644
--- a/tools/ArtistTools/source/BlastPlugin/SampleBase/core/SampleManager.cpp
+++ b/tools/ArtistTools/source/BlastPlugin/SampleBase/core/SampleManager.cpp
@@ -71,7 +71,8 @@
#include "FileReferencesPanel.h"
#include "BlastPlugin.h"
#include "BlastToolBar.h"
-
+#include "NvBlastExtAuthoring.h"
+#include "NvBlastExtExporter.h"
using namespace physx;
const uint32_t DEFAULT_VORONOI_UNIFORM_SITES_NUMBER = 5;
@@ -122,7 +123,9 @@ void loggingCallback(int type, const char* msg, const char* file, int line)
void buildPxChunks(const std::vector<std::vector<Triangle>>& chunkGeometry, std::vector<ExtPxAssetDesc::ChunkDesc>& pxChunks,
std::vector<ExtPxAssetDesc::SubchunkDesc>& pxSubchunks, std::vector<bool>& statics)
{
- ConvexMeshBuilder collisionBuilder(cooking, &physics->getPhysicsInsertionCallback());
+ std::shared_ptr<Nv::Blast::ConvexMeshBuilder> collisionBuilder(
+ NvBlastExtAuthoringCreateConvexMeshBuilder(cooking, &physics->getPhysicsInsertionCallback()),
+ [](Nv::Blast::ConvexMeshBuilder* cmb) {cmb->release(); });
pxChunks.resize(chunkGeometry.size());
pxSubchunks.resize(chunkGeometry.size());
@@ -137,7 +140,8 @@ void buildPxChunks(const std::vector<std::vector<Triangle>>& chunkGeometry, std:
vertices.push_back(chunkGeometry[i][p].c.p);
}
pxSubchunks[i].transform = physx::PxTransform(physx::PxIdentity);
- pxSubchunks[i].geometry = physx::PxConvexMeshGeometry(collisionBuilder.buildConvexMesh(vertices));
+ pxSubchunks[i].geometry = physx::PxConvexMeshGeometry(
+ collisionBuilder.get()->buildConvexMesh(*collisionBuilder.get()->buildCollisionGeometry((uint32_t)vertices.size(), vertices.data())));
pxChunks[i].isStatic = statics.size() == 0 ? false : statics[i];
pxChunks[i].subchunkCount = 1;
pxChunks[i].subchunks = &pxSubchunks[i];
@@ -268,7 +272,7 @@ void saveFractureToObj(std::vector<std::vector<Triangle> > chunksGeometry, std::
std::vector<int> internalSurfaces;
for (uint32_t i = 0; i < totalSize; ++i)
{
- if (chunksGeometry[vc][i].userInfo != 0)
+ if (chunksGeometry[vc][i].materialId != 0)
{
internalSurfaces.push_back(indx++);
internalSurfaces.push_back(indx++);
@@ -383,10 +387,10 @@ bool VoronoiFractureExecutor::execute()
if (mesh == nullptr)
continue;
- VoronoiSitesGenerator* siteGenerator = nullptr;
+ VoronoiSitesGenerator* siteGenerator = NvBlastExtAuthoringCreateVoronoiSitesGenerator(mesh, m_randomGenerator == nullptr ? &sRandomGenerator : m_randomGenerator);
if (m_voronoi)
{
- siteGenerator = new VoronoiSitesGenerator(mesh, m_randomGenerator == nullptr ? &sRandomGenerator : m_randomGenerator);
+// siteGenerator = new VoronoiSitesGenerator(mesh, m_randomGenerator == nullptr ? &sRandomGenerator : m_randomGenerator);
if (0 == m_voronoi->siteGeneration)
{
siteGenerator->uniformlyGenerateSitesInMesh(m_voronoi->numSites);
@@ -398,11 +402,13 @@ bool VoronoiFractureExecutor::execute()
}
else
{
- siteGenerator = new VoronoiSitesGenerator(mesh, m_randomGenerator == nullptr ? &sRandomGenerator : m_randomGenerator);
+// siteGenerator = new VoronoiSitesGenerator(mesh, m_randomGenerator == nullptr ? &sRandomGenerator : m_randomGenerator);
siteGenerator->uniformlyGenerateSitesInMesh(DEFAULT_VORONOI_UNIFORM_SITES_NUMBER);
}
- m_fractureTool->voronoiFracturing(*it, siteGenerator->getVoronoiSites(), false);
+ const physx::PxVec3* sites = nullptr;
+ uint32_t sitesCount = siteGenerator->getVoronoiSites(sites);
+ m_fractureTool->voronoiFracturing(*it, sitesCount, sites, false);
delete siteGenerator;
}
m_fractureTool->finalizeFracturing();
@@ -686,23 +692,24 @@ bool SampleManager::saveAsset(BlastAsset* pBlastAsset)
m_fTool->finalizeFracturing();
size_t nChunkListSize = m_fTool->getChunkCount();
- std::vector<std::shared_ptr<Triangle> > chunkMeshes(nChunkListSize);
+ std::vector<Triangle*> chunkMeshes(nChunkListSize);
std::vector<uint32_t> chunkMeshesTriangleCount(nChunkListSize);
- std::vector<bool> isSupport(nChunkListSize);
+ std::shared_ptr<bool> isSupport(new bool[nChunkListSize] { false }, [](bool* b) {delete[] b; });
for (uint32_t i = 0; i < nChunkListSize; ++i)
{
chunkMeshesTriangleCount[i] = m_fTool->getBaseMesh(i, chunkMeshes[i]);
- isSupport[i] = m_fTool->getChunkInfo(i).isLeaf;
+ isSupport.get()[i] = m_fTool->getChunkInfo(i).isLeaf;
}
- BlastBondGenerator bondGenerator(cooking, &physics->getPhysicsInsertionCallback());
+ std::shared_ptr<Nv::Blast::BlastBondGenerator> bondGenerator(
+ NvBlastExtAuthoringCreateBondGenerator(cooking, &physics->getPhysicsInsertionCallback()),
+ [](Nv::Blast::BlastBondGenerator* bg) {bg->release(); });
BondGenerationConfig cnf;
cnf.bondMode = BondGenerationConfig::AVERAGE;
- std::vector<NvBlastChunkDesc> chunkDesc;
- std::vector<NvBlastBondDesc> bondDescs;
- bondGenerator.buildDescFromInternalFracture(m_fTool, isSupport, bondDescs, chunkDesc);
- const uint32_t chunkCount = static_cast<uint32_t>(chunkDesc.size());
- const uint32_t bondCount = static_cast<uint32_t>(bondDescs.size());
+ NvBlastChunkDesc* chunkDesc;
+ NvBlastBondDesc* bondDescs;
+ const uint32_t bondCount = bondGenerator.get()->buildDescFromInternalFracture(m_fTool, isSupport.get(), bondDescs, chunkDesc);
+ const uint32_t chunkCount = nChunkListSize;
if (bondCount == 0)
{
std::cout << "Can't create bonds descriptors..." << std::endl;
@@ -712,9 +719,9 @@ bool SampleManager::saveAsset(BlastAsset* pBlastAsset)
{
std::vector<uint32_t> chunkReorderMap(chunkCount);
std::vector<char> scratch(chunkCount * sizeof(NvBlastChunkDesc));
- NvBlastEnsureAssetExactSupportCoverage(chunkDesc.data(), chunkCount, scratch.data(), loggingCallback);
- NvBlastBuildAssetDescChunkReorderMap(chunkReorderMap.data(), chunkDesc.data(), chunkCount, scratch.data(), loggingCallback);
- NvBlastApplyAssetDescChunkReorderMapInPlace(chunkDesc.data(), chunkCount, bondDescs.data(), bondCount, chunkReorderMap.data(), true, scratch.data(), loggingCallback);
+ NvBlastEnsureAssetExactSupportCoverage(chunkDesc, chunkCount, scratch.data(), loggingCallback);
+ NvBlastBuildAssetDescChunkReorderMap(chunkReorderMap.data(), chunkDesc, chunkCount, scratch.data(), loggingCallback);
+ NvBlastApplyAssetDescChunkReorderMapInPlace(chunkDesc, chunkCount, bondDescs, bondCount, chunkReorderMap.data(), true, scratch.data(), loggingCallback);
chunkReorderInvMap.resize(chunkReorderMap.size());
Nv::Blast::invertMap(chunkReorderInvMap.data(), chunkReorderMap.data(), static_cast<unsigned int>(chunkReorderMap.size()));
}
@@ -724,7 +731,7 @@ bool SampleManager::saveAsset(BlastAsset* pBlastAsset)
{
uint32_t chunkIndex = chunkReorderInvMap[i];
resultGeometry[chunkIndex].resize(chunkMeshesTriangleCount[i]);
- memcpy(resultGeometry[chunkIndex].data(), chunkMeshes[i].get(), chunkMeshesTriangleCount[i] * sizeof(Triangle));
+ memcpy(resultGeometry[chunkIndex].data(), chunkMeshes[i], chunkMeshesTriangleCount[i] * sizeof(Triangle));
}
saveFractureToObj(resultGeometry, desc.name, outDir);
@@ -855,7 +862,7 @@ uint32_t createChunkRecursive(FbxManager* sdkManager, uint32_t currentCpIdx, uin
mesh->AddPolygon(currentCpIdx + cpIdx + 1);
mesh->AddPolygon(currentCpIdx + cpIdx + 2);
mesh->EndPolygon();
- if (tri.userInfo == 0)
+ if (tri.materialId == 0)
{
matElement->GetIndexArray().SetAt(polyCount, 0);
}
@@ -1003,23 +1010,24 @@ bool SampleManager::exportAsset()
m_fTool->finalizeFracturing();
size_t nChunkListSize = m_fTool->getChunkCount();
- std::vector<std::shared_ptr<Triangle> > chunkMeshes(nChunkListSize);
+ std::vector<Triangle*> chunkMeshes(nChunkListSize);
std::vector<uint32_t> chunkMeshesTriangleCount(nChunkListSize);
- std::vector<bool> isSupport(nChunkListSize);
+ std::shared_ptr<bool> isSupport(new bool[nChunkListSize] { false }, [](bool* b) {delete[] b; });
for (uint32_t i = 0; i < nChunkListSize; ++i)
{
chunkMeshesTriangleCount[i] = m_fTool->getBaseMesh(i, chunkMeshes[i]);
- isSupport[i] = m_fTool->getChunkInfo(i).isLeaf;
+ isSupport.get()[i] = m_fTool->getChunkInfo(i).isLeaf;
}
- BlastBondGenerator bondGenerator(cooking, &physics->getPhysicsInsertionCallback());
+ std::shared_ptr<Nv::Blast::BlastBondGenerator> bondGenerator(
+ NvBlastExtAuthoringCreateBondGenerator(cooking, &physics->getPhysicsInsertionCallback()),
+ [](Nv::Blast::BlastBondGenerator* bg) {bg->release(); });
BondGenerationConfig cnf;
cnf.bondMode = BondGenerationConfig::AVERAGE;
- std::vector<NvBlastChunkDesc> chunkDesc;
- std::vector<NvBlastBondDesc> bondDescs;
- bondGenerator.buildDescFromInternalFracture(m_fTool, isSupport, bondDescs, chunkDesc);
- const uint32_t chunkCount = static_cast<uint32_t>(chunkDesc.size());
- const uint32_t bondCount = static_cast<uint32_t>(bondDescs.size());
+ NvBlastChunkDesc* chunkDesc;
+ NvBlastBondDesc* bondDescs;
+ const uint32_t bondCount = bondGenerator.get()->buildDescFromInternalFracture(m_fTool, isSupport.get(), bondDescs, chunkDesc);
+ const uint32_t chunkCount = nChunkListSize;
if (bondCount == 0)
{
std::cout << "Can't create bonds descriptors..." << std::endl;
@@ -1029,9 +1037,9 @@ bool SampleManager::exportAsset()
{
std::vector<uint32_t> chunkReorderMap(chunkCount);
std::vector<char> scratch(chunkCount * sizeof(NvBlastChunkDesc));
- NvBlastEnsureAssetExactSupportCoverage(chunkDesc.data(), chunkCount, scratch.data(), loggingCallback);
- NvBlastBuildAssetDescChunkReorderMap(chunkReorderMap.data(), chunkDesc.data(), chunkCount, scratch.data(), loggingCallback);
- NvBlastApplyAssetDescChunkReorderMapInPlace(chunkDesc.data(), chunkCount, bondDescs.data(), bondCount, chunkReorderMap.data(), true, scratch.data(), loggingCallback);
+ NvBlastEnsureAssetExactSupportCoverage(chunkDesc, chunkCount, scratch.data(), loggingCallback);
+ NvBlastBuildAssetDescChunkReorderMap(chunkReorderMap.data(), chunkDesc, chunkCount, scratch.data(), loggingCallback);
+ NvBlastApplyAssetDescChunkReorderMapInPlace(chunkDesc, chunkCount, bondDescs, bondCount, chunkReorderMap.data(), true, scratch.data(), loggingCallback);
chunkReorderInvMap.resize(chunkReorderMap.size());
Nv::Blast::invertMap(chunkReorderInvMap.data(), chunkReorderMap.data(), static_cast<unsigned int>(chunkReorderMap.size()));
}
@@ -1041,11 +1049,30 @@ bool SampleManager::exportAsset()
{
uint32_t chunkIndex = chunkReorderInvMap[i];
resultGeometry[chunkIndex].resize(chunkMeshesTriangleCount[i]);
- memcpy(resultGeometry[chunkIndex].data(), chunkMeshes[i].get(), chunkMeshesTriangleCount[i] * sizeof(Triangle));
+ memcpy(resultGeometry[chunkIndex].data(), chunkMeshes[i], chunkMeshesTriangleCount[i] * sizeof(Triangle));
}
if (asset.exportFBX)
{
+ std::string outputFilePath = GlobalSettings::MakeFileName(outDir.c_str(), asset.fbx.buf);
+
+ Nv::Blast::ConvexMeshBuilder* collisionBuilder = NvBlastExtAuthoringCreateConvexMeshBuilder(cooking, &physics->getPhysicsInsertionCallback());
+ Nv::Blast::AuthoringResult* result = NvBlastExtAuthoringProcessFracture(*m_fTool, *bondGenerator, *collisionBuilder);
+
+ if (!asset.embedFBXCollision)
+ {
+ result->releaseCollisionHulls();
+ }
+
+ std::shared_ptr<IMeshFileWriter> fileWriter(NvBlastExtExporterCreateFbxFileWriter(bOutputFBXAscii), [](IMeshFileWriter* p) {p->release(); });
+ fileWriter->appendMesh(*result, asset.name.buf);
+ if (!fileWriter->saveToFile(asset.fbx.buf, outDir.c_str()))
+ {
+ std::cerr << "Can't write geometry to FBX file." << std::endl;
+ return false;
+ }
+
+#if (0)
FbxManager* sdkManager = FbxManager::Create();
FbxIOSettings* ios = FbxIOSettings::Create(sdkManager, IOSROOT);
@@ -1150,6 +1177,7 @@ bool SampleManager::exportAsset()
sdkManager->Destroy();
sdkManager = nullptr;
+#endif
std::string info = outputFilePath + " is saved.";
viewer_info(info.c_str());
@@ -1180,20 +1208,6 @@ bool SampleManager::exportAsset()
viewer_info(info.c_str());
}
- if (asset.exportCollision)
- {
- SampleManager* pSampleManager = SampleManager::ins();
- PhysXController& physXController = pSampleManager->getPhysXController();
- PxPhysics& physics = physXController.getPhysics();
- PxScene& scene = physXController.getPhysXScene();
-
- std::string outputFilePath = GlobalSettings::MakeFileName(outDir.c_str(), asset.collision.buf);
- physXController.ExportCollisionRepX(outputFilePath.c_str(), &physics, &scene, false);
-
- std::string info = outputFilePath + " is saved.";
- viewer_info(info.c_str());
- }
-
if (asset.exportTKAsset)
{
std::string outputFilePath = GlobalSettings::MakeFileName(outDir.c_str(), asset.tkasset.buf);
@@ -1247,26 +1261,29 @@ void SampleManager::_createAsset(BlastAssetModelSimple** ppBlastAsset,
physicsManager = &bc.getExtPxManager();
TkFramework& tk = bc.getTkFramework();
- std::vector<NvBlastChunkDesc> chunkDesc;
- std::vector<NvBlastBondDesc> bondDescs;
- std::vector<std::shared_ptr<Triangle> > chunkMeshes;
+ size_t nChunkListSize = m_fTool->getChunkCount();
+
+ std::vector<Triangle*> chunkMeshes;
std::vector<uint32_t> chunkMeshesTriangleCount(nChunkListSize);
- std::vector<bool> isSupport;
+ std::shared_ptr<bool> isSupport(new bool[nChunkListSize] { false }, [](bool* b) {delete[] b; });
- size_t nChunkListSize = m_fTool->getChunkCount();
chunkMeshes.resize(nChunkListSize);
- isSupport.resize(nChunkListSize);
for (uint32_t i = 0; i < nChunkListSize; ++i)
{
chunkMeshesTriangleCount[i] = m_fTool->getBaseMesh(i, chunkMeshes[i]);
- isSupport[i] = supports.size() == 0 ? m_fTool->getChunkInfo(i).isLeaf : supports[i];
+ isSupport.get()[i] = supports.size() == 0 ? m_fTool->getChunkInfo(i).isLeaf : supports[i];
}
- BlastBondGenerator bondGenerator(cooking, &physics->getPhysicsInsertionCallback());
- bondGenerator.buildDescFromInternalFracture(m_fTool, isSupport, bondDescs, chunkDesc);
- bondDescs.clear();
- bondGenerator.bondsFromPrefractured(chunkMeshes, isSupport, bondDescs);
- int bondDescsSize = bondDescs.size();
+ std::shared_ptr<Nv::Blast::BlastBondGenerator> bondGenerator(
+ NvBlastExtAuthoringCreateBondGenerator(cooking, &physics->getPhysicsInsertionCallback()),
+ [](Nv::Blast::BlastBondGenerator* bg) {bg->release(); });
+ BondGenerationConfig cnf;
+ cnf.bondMode = BondGenerationConfig::AVERAGE;
+ NvBlastChunkDesc* chunkDesc;
+ NvBlastBondDesc* bondDescs;
+ const uint32_t bondCount = bondGenerator.get()->buildDescFromInternalFracture(m_fTool, isSupport.get(), bondDescs, chunkDesc);
+ const uint32_t chunkCount = nChunkListSize;
+ int bondDescsSize = bondCount;
if (bondDescsSize == worlds.size())
{
for (int bds = 0; bds < bondDescsSize; bds++)
@@ -1278,8 +1295,6 @@ void SampleManager::_createAsset(BlastAssetModelSimple** ppBlastAsset,
}
}
- const uint32_t chunkCount = static_cast<uint32_t>(chunkDesc.size());
- const uint32_t bondCount = static_cast<uint32_t>(bondDescs.size());
if (bondCount == 0)
{
std::cout << "Can't create bonds descriptors..." << std::endl;
@@ -1290,9 +1305,9 @@ void SampleManager::_createAsset(BlastAssetModelSimple** ppBlastAsset,
{
std::vector<uint32_t> chunkReorderMap(chunkCount);
std::vector<char> scratch(chunkCount * sizeof(NvBlastChunkDesc));
- NvBlastEnsureAssetExactSupportCoverage(chunkDesc.data(), chunkCount, scratch.data(), loggingCallback);
- NvBlastBuildAssetDescChunkReorderMap(chunkReorderMap.data(), chunkDesc.data(), chunkCount, scratch.data(), loggingCallback);
- NvBlastApplyAssetDescChunkReorderMapInPlace(chunkDesc.data(), chunkCount, bondDescs.data(), bondCount, chunkReorderMap.data(), true, scratch.data(), loggingCallback);
+ NvBlastEnsureAssetExactSupportCoverage(chunkDesc, chunkCount, scratch.data(), loggingCallback);
+ NvBlastBuildAssetDescChunkReorderMap(chunkReorderMap.data(), chunkDesc, chunkCount, scratch.data(), loggingCallback);
+ NvBlastApplyAssetDescChunkReorderMapInPlace(chunkDesc, chunkCount, bondDescs, bondCount, chunkReorderMap.data(), true, scratch.data(), loggingCallback);
chunkReorderInvMap.resize(chunkReorderMap.size());
Nv::Blast::invertMap(chunkReorderInvMap.data(), chunkReorderMap.data(), static_cast<unsigned int>(chunkReorderMap.size()));
}
@@ -1303,7 +1318,7 @@ void SampleManager::_createAsset(BlastAssetModelSimple** ppBlastAsset,
{
uint32_t chunkIndex = chunkReorderInvMap[i];
resultGeometry[chunkIndex].resize(chunkMeshesTriangleCount[i]);
- memcpy(resultGeometry[chunkIndex].data(), chunkMeshes[i].get(), chunkMeshesTriangleCount[i] * sizeof(Triangle));
+ memcpy(resultGeometry[chunkIndex].data(), chunkMeshes[i], chunkMeshesTriangleCount[i] * sizeof(Triangle));
}
// prepare physics data (convexes)
@@ -1314,9 +1329,9 @@ void SampleManager::_createAsset(BlastAssetModelSimple** ppBlastAsset,
// build and serialize ExtPhysicsAsset
ExtPxAssetDesc descriptor;
descriptor.bondCount = bondCount;
- descriptor.bondDescs = bondDescs.data();
+ descriptor.bondDescs = bondDescs;
descriptor.chunkCount = chunkCount;
- descriptor.chunkDescs = chunkDesc.data();
+ descriptor.chunkDescs = chunkDesc;
descriptor.bondFlags = joints.data();
descriptor.pxChunks = pxChunks.data();
ExtPxAsset* asset = ExtPxAsset::create(descriptor, tk);
@@ -2760,26 +2775,28 @@ void SampleManager::_addAssetToProjectParam(BlastAsset* pBlastAsset)
{
chunkArray.buf = new BPPChunk[chunkCount];
chunkArray.arraySizes[0] = chunkCount;
- char chunkname[10];
+ char chunkname[32];
for (int cc = 0; cc < chunkCount; ++cc)
{
BPPChunk& chunk = chunkArray.buf[cc];
::init(chunk);
- std::vector<uint32_t> parentChunkIndexes;
- parentChunkIndexes.push_back(cc);
- uint32_t parentChunkIndex = cc;
- while ((parentChunkIndex = pNvBlastChunk[parentChunkIndex].parentChunkIndex) != -1)
- {
- parentChunkIndexes.push_back(parentChunkIndex);
- }
+ //std::vector<uint32_t> parentChunkIndexes;
+ //parentChunkIndexes.push_back(cc);
+ //uint32_t parentChunkIndex = cc;
+ //while ((parentChunkIndex = pNvBlastChunk[parentChunkIndex].parentChunkIndex) != -1)
+ //{
+ // parentChunkIndexes.push_back(parentChunkIndex);
+ //}
std::string strChunkName = "Chunk";
- for (int pcIndex = parentChunkIndexes.size() - 1; pcIndex >= 0; pcIndex--)
- {
- sprintf(chunkname, "_%d", parentChunkIndexes[pcIndex]);
- strChunkName += chunkname;
- }
+ sprintf(chunkname, "_%d", cc);
+ strChunkName += chunkname;
+ //for (int pcIndex = parentChunkIndexes.size() - 1; pcIndex >= 0; pcIndex--)
+ //{
+ // sprintf(chunkname, "_%d", parentChunkIndexes[pcIndex]);
+ // strChunkName += chunkname;
+ //}
copy(chunk.name, strChunkName.c_str());
chunk.asset = asset.ID;
@@ -2927,7 +2944,7 @@ void SampleManager::_addAssetToProjectParam(BlastAsset* pBlastAsset)
{
bondArray.buf = new BPPBond[bondCount];
bondArray.arraySizes[0] = bondCount;
- char bondname[20];
+ char bondname[64];
bool visible;
for (int bc = 0; bc < bondCount; ++bc)
{
diff --git a/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Mesh.h b/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Mesh.h
index fa214e0..3ef7090 100644
--- a/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Mesh.h
+++ b/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Mesh.h
@@ -56,6 +56,7 @@ public:
public:
physx::PxVec3 position;
physx::PxVec3 normal;
+ physx::PxVec3 facenormal;
physx::PxVec3 tangent;
physx::PxVec2 uv;
};
diff --git a/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/RenderMaterial.cpp b/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/RenderMaterial.cpp
index a9fedf0..88533cb 100644
--- a/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/RenderMaterial.cpp
+++ b/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/RenderMaterial.cpp
@@ -285,7 +285,7 @@ void RenderMaterial::setTextureFileName(std::string textureFileName, TextureType
std::string searchDir = mTextureFileNames[tt];
size_t ind = searchDir.find_last_of('/');
- if (ind > 0)
+ if (ind > 0 && (ind != std::string::npos))
searchDir = searchDir.substr(0, ind);
ResourceManager* pResourceManager = ResourceManager::ins();
diff --git a/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderable.cpp b/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderable.cpp
index 5ce713d..d51101f 100644
--- a/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderable.cpp
+++ b/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderable.cpp
@@ -29,7 +29,7 @@
#include "Renderable.h"
#include "Renderer.h"
#include "RenderUtils.h"
-
+#include "GlobalSettings.h"
const DirectX::XMFLOAT4 DEFAULT_COLOR(0.5f, 0.5f, 0.5f, 1.0f);
Renderable::Renderable(IRenderMesh& mesh, RenderMaterial& material) : m_mesh(mesh), m_scale(1, 1, 1), m_color(DEFAULT_COLOR), m_hidden(false), m_transform(PxIdentity)
@@ -64,6 +64,7 @@ void Renderable::render(Renderer& renderer, bool depthStencilOnly) const
float useSpecularTexture = -1.0;
float useNormalTexture = -1.0;
float specularShininess = 1.0;
+ bool useTexture = GlobalSettings::Inst().m_renderStyle == MESH_RENDER_TEXTURED;
RenderMaterial& renderMaterial = m_materialInstance->getMaterial();
std::string mName = renderMaterial.getMaterialName();
if (mName != "")
@@ -77,19 +78,19 @@ void Renderable::render(Renderer& renderer, bool depthStencilOnly) const
specularColor = DirectX::XMFLOAT4(r, g, b, a);
texName = renderMaterial.getTextureFileName();
- if (texName != "" && !renderMaterial.isBadTexture())
+ if (useTexture && texName != "" && !renderMaterial.isBadTexture())
{
useDiffuseTexture = 1.0;
}
texName = renderMaterial.getTextureFileName(RenderMaterial::TT_Specular);
- if (texName != "" && !renderMaterial.isBadTexture(RenderMaterial::TT_Specular))
+ if (useTexture && texName != "" && !renderMaterial.isBadTexture(RenderMaterial::TT_Specular))
{
useSpecularTexture = 1.0;
}
texName = renderMaterial.getTextureFileName(RenderMaterial::TT_Normal);
- if (texName != "" && !renderMaterial.isBadTexture(RenderMaterial::TT_Normal))
+ if (useTexture && texName != "" && !renderMaterial.isBadTexture(RenderMaterial::TT_Normal))
{
useNormalTexture = 1.0;
}
diff --git a/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderer.cpp b/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderer.cpp
index 9fe5038..00b3256 100644
--- a/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderer.cpp
+++ b/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderer.cpp
@@ -55,7 +55,6 @@ Renderer::Renderer()
: m_cameraCB(nullptr)
, m_worldCB(nullptr)
, m_objectCB(nullptr)
-, m_RSState(nullptr)
, m_opaqueRenderDSState(nullptr)
, m_transparencyRenderDSState(nullptr)
, m_opaqueRenderNoDepthDSState(nullptr)
@@ -79,6 +78,9 @@ Renderer::Renderer()
m_worldCBData.dirLightDir = DirectX::XMFLOAT3(-0.08f, -0.34f, -0.91f);
m_worldCBData.specularPower = 140.0f;
m_worldCBData.specularIntensity = 0.4f;
+
+ m_RSState[0] = nullptr;
+ m_RSState[1] = nullptr;
toggleCameraSpeed(false);
}
@@ -89,13 +91,9 @@ Renderer::~Renderer()
void Renderer::initializeDefaultRSState()
{
- SAFE_RELEASE(m_RSState);
D3D11_RASTERIZER_DESC desc;
ZeroMemory(&desc, sizeof(desc));
-// Add By Lixu Begin
desc.CullMode = D3D11_CULL_NONE;
-// Add By Lixu End
- desc.FillMode = m_wireframeMode ? D3D11_FILL_WIREFRAME : D3D11_FILL_SOLID;
desc.AntialiasedLineEnable = FALSE;
desc.DepthBias = 0;
desc.DepthBiasClamp = 0;
@@ -105,7 +103,11 @@ void Renderer::initializeDefaultRSState()
desc.ScissorEnable = FALSE;
desc.SlopeScaledDepthBias = 0;
- V(m_device->CreateRasterizerState(&desc, &m_RSState));
+ desc.FillMode = D3D11_FILL_SOLID;
+ V(m_device->CreateRasterizerState(&desc, &m_RSState[0]));
+
+ desc.FillMode = D3D11_FILL_WIREFRAME;
+ V(m_device->CreateRasterizerState(&desc, &m_RSState[1]));
}
HRESULT Renderer::DeviceCreated(ID3D11Device* device)
@@ -242,7 +244,8 @@ void Renderer::DeviceDestroyed()
SAFE_RELEASE(m_cameraCB);
SAFE_RELEASE(m_worldCB);
SAFE_RELEASE(m_objectCB);
- SAFE_RELEASE(m_RSState);
+ SAFE_RELEASE(m_RSState[0]);
+ SAFE_RELEASE(m_RSState[1]);
SAFE_RELEASE(m_opaqueRenderDSState);
SAFE_RELEASE(m_transparencyRenderDSState);
SAFE_RELEASE(m_opaqueRenderNoDepthDSState);
@@ -360,6 +363,10 @@ void Renderer::setAllConstantBuffers(ID3D11DeviceContext* ctx)
void Renderer::Render(ID3D11Device* /*device*/, ID3D11DeviceContext* ctx, ID3D11RenderTargetView* pRTV,
ID3D11DepthStencilView*)
{
+ GlobalSettings& globalSettings = GlobalSettings::Inst();
+ if (!globalSettings.m_showGraphicsMesh)
+ return;
+
PROFILER_SCOPED_FUNCTION();
m_context = ctx;
@@ -389,6 +396,19 @@ void Renderer::Render(ID3D11Device* /*device*/, ID3D11DeviceContext* ctx, ID3D11
D3D11_MAPPED_SUBRESOURCE mappedResource;
ctx->Map(m_worldCB, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
CBWorld* worldBuffer = (CBWorld*)mappedResource.pData;
+ float flatNormal = -1.0;
+ if (globalSettings.m_renderStyle == MESH_RENDER_FLAT)
+ {
+ flatNormal = 1.0;
+ }
+ float useLighting = 1.0;
+ if (!globalSettings.m_useLighting)
+ {
+ useLighting = -1.0;
+ }
+ m_worldCBData.flatNormal = flatNormal;
+ m_worldCBData.wireFrameOver = -1.0;
+ m_worldCBData.useLighting = useLighting;
Light::FillLightShaderParam(m_worldCBData.lightParam);
memcpy(worldBuffer, &m_worldCBData, sizeof(m_worldCBData));
//worldBuffer->ambientColor = m_CBWorldData.ambientColor;
@@ -401,7 +421,15 @@ void Renderer::Render(ID3D11Device* /*device*/, ID3D11DeviceContext* ctx, ID3D11
ctx->Unmap(m_worldCB, 0);
}
- ctx->RSSetState(m_RSState);
+ if (globalSettings.m_renderStyle != MESH_RENDER_WIREFRAME)
+ {
+ ctx->RSSetState(m_RSState[0]);
+ }
+ else
+ {
+ ctx->RSSetState(m_RSState[1]);
+ }
+
ctx->PSSetSamplers(0, 1, &m_linearSampler);
ctx->PSSetSamplers(1, 1, &m_pointSampler);
@@ -450,7 +478,6 @@ void Renderer::Render(ID3D11Device* /*device*/, ID3D11DeviceContext* ctx, ID3D11
// Opaque render
{
ctx->RSSetViewports(1, &m_viewport);
- ctx->RSSetState(m_RSState);
ctx->OMSetRenderTargets(1, &pRTV, m_DSView);
ctx->OMSetDepthStencilState(m_opaqueRenderDSState, 0xFF);
@@ -498,8 +525,44 @@ void Renderer::Render(ID3D11Device* /*device*/, ID3D11DeviceContext* ctx, ID3D11
}
}
+ // draw overline
+ if (globalSettings.m_showWireframe)
+ {
+ ctx->RSSetState(m_RSState[1]);
+
+ // update wireFrameOver
+ {
+ D3D11_MAPPED_SUBRESOURCE mappedResource;
+ ctx->Map(m_worldCB, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
+ CBWorld* worldBuffer = (CBWorld*)mappedResource.pData;
+ float wireFrameOver = -1.0;
+ {
+ if (globalSettings.m_showWireframe)
+ {
+ wireFrameOver = 1.0;
+ }
+ }
+ m_worldCBData.wireFrameOver = wireFrameOver;
+ memcpy(worldBuffer, &m_worldCBData, sizeof(m_worldCBData));
+ ctx->Unmap(m_worldCB, 0);
+ }
+
+ for (auto it = m_renderables.begin(); it != m_renderables.end(); it++)
+ {
+ if (!(*it)->isTransparent() && !(*it)->isHidden())
+ {
+ (*it)->render(*this);
+ }
+ }
+
+ if (globalSettings.m_renderStyle != MESH_RENDER_WIREFRAME)
+ {
+ ctx->RSSetState(m_RSState[0]);
+ }
+ }
+
// modulate shadows
- if (m_shadowEnabled)
+ if (m_shadowEnabled && globalSettings.m_useLighting)
{
m_shadow.modulateShadowBuffer(pRTV);
}
diff --git a/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderer.h b/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderer.h
index 6981e15..2142921 100644
--- a/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderer.h
+++ b/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderer.h
@@ -198,6 +198,10 @@ class Renderer : public ISampleController
float specularPower;
DirectX::XMFLOAT3 dirLightColor;
float specularIntensity; // TODO: actually it's per object property
+ float flatNormal;
+ float wireFrameOver;
+ float useLighting;
+ float unusedPad4;
LightShaderParam lightParam;
};
struct CBObject
@@ -235,7 +239,7 @@ class Renderer : public ISampleController
D3D11_VIEWPORT m_viewport;
// DX11 states
- ID3D11RasterizerState* m_RSState;
+ ID3D11RasterizerState* m_RSState[2];
ID3D11DepthStencilState* m_opaqueRenderDSState;
ID3D11DepthStencilState* m_transparencyRenderDSState;
ID3D11DepthStencilState* m_opaqueRenderNoDepthDSState;
diff --git a/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/ResourceManager.cpp b/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/ResourceManager.cpp
index 6e4cc50..d1d04e2 100644
--- a/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/ResourceManager.cpp
+++ b/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/ResourceManager.cpp
@@ -241,7 +241,7 @@ bool ResourceManager::findFile(std::string fileName, const std::vector<const cha
}
size_t ind = fileNameOnly.find_last_of('/');
- if (ind > 0)
+ if (ind > 0 && (ind != std::string::npos))
fileNameOnly = fileNameOnly.substr(ind + 1);
// Add By Lixu Begin
diff --git a/tools/ArtistTools/source/BlastPlugin/Shaders/common_buffers_ex.hlsl b/tools/ArtistTools/source/BlastPlugin/Shaders/common_buffers_ex.hlsl
index 0076599..d6a37b0 100644
--- a/tools/ArtistTools/source/BlastPlugin/Shaders/common_buffers_ex.hlsl
+++ b/tools/ArtistTools/source/BlastPlugin/Shaders/common_buffers_ex.hlsl
@@ -42,6 +42,9 @@ cbuffer World : register(b1)
float specularPower;
float3 dirLightColor;
float specularIntensity;
+ float g_flatNormal;
+ float g_wireFrameOver;
+ float g_useLighting;
Light g_Light[4];
};
diff --git a/tools/ArtistTools/source/BlastPlugin/Shaders/model_simple_textured_ex.hlsl b/tools/ArtistTools/source/BlastPlugin/Shaders/model_simple_textured_ex.hlsl
index 152174c..6d8e819 100644
--- a/tools/ArtistTools/source/BlastPlugin/Shaders/model_simple_textured_ex.hlsl
+++ b/tools/ArtistTools/source/BlastPlugin/Shaders/model_simple_textured_ex.hlsl
@@ -10,8 +10,9 @@ Texture2D envTexture : register(t3);
struct VS_INPUT
{
float3 position : POSITION0;
- float3 normal : NORMAL0;
- float3 tangent : TANGENT0;
+ float3 normal : VERTEX_NORMAL;
+ float3 faceNormal : FACE_NORMAL;
+ float3 tangent : TANGENT;
float2 uv : TEXCOORD0;
float health : TEXCOORD1;
};
@@ -36,8 +37,9 @@ VS_OUTPUT VS(VS_INPUT iV)
oV.worldPos = worldSpacePos;
// normals
- float3 worldNormal = mul(float4(iV.normal, 0.0f), worldMatrix);
- oV.normal = worldNormal;
+ float3 normal = (g_flatNormal > 0) ? normalize(iV.faceNormal) : normalize(iV.normal);
+ normal = mul(float4(normal, 0.0f), worldMatrix);
+ oV.normal = normal;
oV.tangent = normalize(iV.tangent);
@@ -75,11 +77,44 @@ inline float3 computeSpecularLighting(
float4 PS(VS_OUTPUT iV) : SV_Target0
{
+ if(g_wireFrameOver > 0)
+ return float4(0,0,0,1);
+
float3 diffuseColor = m_diffuseColor.xyz;
if(m_useDiffuseTexture > 0)
{
diffuseColor = diffuseTexture.Sample(defaultSampler, iV.uv).xyz;
}
+
+ if(selected > 0)
+ {
+ if(diffuseColor.r > 0.5)
+ {
+ diffuseColor.r = 0.5;
+ }
+ else
+ {
+ diffuseColor.r += 0.5;
+ }
+ return float4(diffuseColor, 1.0f);
+ }
+
+ if (g_useLighting < 0)
+ {
+ if(selected > 0)
+ {
+ if(diffuseColor.r > 0.5)
+ {
+ diffuseColor.r = 0.5;
+ }
+ else
+ {
+ diffuseColor.r += 0.5;
+ }
+ }
+ return float4(diffuseColor, 1.0f);
+ }
+
float3 specularColor = m_specularColor.xyz;
if(m_useSpecularTexture > 0)
{
@@ -144,17 +179,6 @@ float4 PS(VS_OUTPUT iV) : SV_Target0
}
color.rgb = (ambient + diffuse) * albedo + specular;
-
- if(selected > 0)
- {
- if(color.r > 0.5)
- {
- color.r = 0.5;
- }
- else
- {
- color.r += 0.5;
- }
- }
+
return color;
} \ No newline at end of file
diff --git a/tools/ArtistTools/source/BlastPlugin/UI/FileReferencesPanel.ui b/tools/ArtistTools/source/BlastPlugin/UI/FileReferencesPanel.ui
index 15d727b..bde4935 100644
--- a/tools/ArtistTools/source/BlastPlugin/UI/FileReferencesPanel.ui
+++ b/tools/ArtistTools/source/BlastPlugin/UI/FileReferencesPanel.ui
@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>340</width>
- <height>311</height>
+ <height>277</height>
</rect>
</property>
<property name="sizePolicy">
@@ -139,8 +139,21 @@
<string>Export Assets</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
- <item row="0" column="0">
- <widget class="QLabel" name="labelFBX">
+ <item row="2" column="1">
+ <widget class="QLineEdit" name="lineEditObj"/>
+ </item>
+ <item row="2" column="2">
+ <widget class="QCheckBox" name="checkBoxObj">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QLineEdit" name="lineEditLLAsset"/>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="labelLLAsset">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
@@ -160,18 +173,22 @@
</size>
</property>
<property name="text">
- <string>FBX</string>
+ <string>LLAsset</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
- <item row="2" column="1">
- <widget class="QLineEdit" name="lineEditCollision"/>
+ <item row="0" column="2">
+ <widget class="QCheckBox" name="checkBoxFBX">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
</item>
<item row="2" column="0">
- <widget class="QLabel" name="labelCollision">
+ <widget class="QLabel" name="labelObj">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
@@ -191,21 +208,18 @@
</size>
</property>
<property name="text">
- <string>Collision</string>
+ <string>Obj</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
- <item row="1" column="1">
- <widget class="QLineEdit" name="lineEditObj"/>
- </item>
<item row="0" column="1">
<widget class="QLineEdit" name="lineEditFBX"/>
</item>
- <item row="1" column="0">
- <widget class="QLabel" name="labelObj">
+ <item row="0" column="0">
+ <widget class="QLabel" name="labelFBX">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
@@ -225,36 +239,22 @@
</size>
</property>
<property name="text">
- <string>Obj</string>
+ <string>FBX</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
- <item row="0" column="2">
- <widget class="QCheckBox" name="checkBoxFBX">
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- <item row="1" column="2">
- <widget class="QCheckBox" name="checkBoxObj">
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- <item row="2" column="2">
- <widget class="QCheckBox" name="checkBoxCollision">
+ <item row="3" column="2">
+ <widget class="QCheckBox" name="checkBoxLLAsset">
<property name="text">
<string/>
</property>
</widget>
</item>
- <item row="3" column="0">
- <widget class="QLabel" name="labelLLAsset">
+ <item row="4" column="0">
+ <widget class="QLabel" name="labelTKAsset">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
@@ -274,25 +274,25 @@
</size>
</property>
<property name="text">
- <string>LLAsset</string>
+ <string>TKAsset</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
- <item row="3" column="1">
- <widget class="QLineEdit" name="lineEditLLAsset"/>
+ <item row="4" column="1">
+ <widget class="QLineEdit" name="lineEditTKAsset"/>
</item>
- <item row="3" column="2">
- <widget class="QCheckBox" name="checkBoxLLAsset">
+ <item row="4" column="2">
+ <widget class="QCheckBox" name="checkBoxTKAsset">
<property name="text">
<string/>
</property>
</widget>
</item>
- <item row="4" column="0">
- <widget class="QLabel" name="labelTKAsset">
+ <item row="5" column="0">
+ <widget class="QLabel" name="labelBPXA">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
@@ -312,25 +312,25 @@
</size>
</property>
<property name="text">
- <string>TKAsset</string>
+ <string>BPXA</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
- <item row="4" column="1">
- <widget class="QLineEdit" name="lineEditTKAsset"/>
+ <item row="5" column="1">
+ <widget class="QLineEdit" name="lineEditBPXA"/>
</item>
- <item row="4" column="2">
- <widget class="QCheckBox" name="checkBoxTKAsset">
+ <item row="5" column="2">
+ <widget class="QCheckBox" name="checkBoxBPXA">
<property name="text">
<string/>
</property>
</widget>
</item>
- <item row="5" column="0">
- <widget class="QLabel" name="labelBPXA">
+ <item row="1" column="0">
+ <widget class="QLabel" name="labelEmbedFBXCollision">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
@@ -350,18 +350,15 @@
</size>
</property>
<property name="text">
- <string>BPXA</string>
+ <string>Embed collision in FBX</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
- <item row="5" column="1">
- <widget class="QLineEdit" name="lineEditBPXA"/>
- </item>
- <item row="5" column="2">
- <widget class="QCheckBox" name="checkBoxBPXA">
+ <item row="1" column="2">
+ <widget class="QCheckBox" name="checkBoxEmbedFBXCollision">
<property name="text">
<string/>
</property>
@@ -410,8 +407,6 @@
<tabstop>checkBoxFBX</tabstop>
<tabstop>lineEditObj</tabstop>
<tabstop>checkBoxObj</tabstop>
- <tabstop>lineEditCollision</tabstop>
- <tabstop>checkBoxCollision</tabstop>
<tabstop>lineEditLLAsset</tabstop>
<tabstop>checkBoxLLAsset</tabstop>
<tabstop>lineEditTKAsset</tabstop>
diff --git a/tools/ArtistTools/source/BlastPlugin/Window/FileReferencesPanel.cpp b/tools/ArtistTools/source/BlastPlugin/Window/FileReferencesPanel.cpp
index 235dd23..b3b09b4 100644
--- a/tools/ArtistTools/source/BlastPlugin/Window/FileReferencesPanel.cpp
+++ b/tools/ArtistTools/source/BlastPlugin/Window/FileReferencesPanel.cpp
@@ -2,7 +2,6 @@
#include "ui_FileReferencesPanel.h"
#include "AppMainWindow.h"
#include <QtWidgets/QFileDialog>
-#include "ProjectParams.h"
#include <QtCore/QFile>
#include <QtCore/QDebug>
#include "GlobalSettings.h"
@@ -24,14 +23,12 @@ FileReferencesPanel::FileReferencesPanel(QWidget *parent)
ui->lineEditFBX->setText("New.fbx");
ui->lineEditObj->setText("New.obj");
- ui->lineEditCollision->setText("New.repx");
ui->lineEditLLAsset->setText("Newll.blast");
ui->lineEditTKAsset->setText("Newtk.blast");
ui->lineEditBPXA->setText("New.blast");
bValid = false;
ui->checkBoxFBX->setChecked(false);
ui->checkBoxObj->setChecked(false);
- ui->checkBoxCollision->setChecked(false);
ui->checkBoxLLAsset->setChecked(false);
ui->checkBoxTKAsset->setChecked(false);
ui->checkBoxBPXA->setChecked(false);
@@ -59,15 +56,12 @@ void FileReferencesPanel::updateValues()
ui->lineEditFBX->setText("");
ui->lineEditObj->setText("");
- ui->lineEditCollision->setText("");
ui->lineEditLLAsset->setText("");
ui->lineEditTKAsset->setText("");
ui->lineEditBPXA->setText("");
bValid = false;
ui->checkBoxFBX->setChecked(false);
ui->checkBoxObj->setChecked(false);
- ui->checkBoxCollision->setChecked(false);
- ui->checkBoxLLAsset->setChecked(false);
ui->checkBoxTKAsset->setChecked(false);
ui->checkBoxBPXA->setChecked(false);
bValid = true;
@@ -128,13 +122,6 @@ void FileReferencesPanel::updateValues()
ui->lineEditObj->setText(fileInfo.baseName() + "_New.obj");
}
- if (asset.collision.buf != nullptr)
- ui->lineEditCollision->setText(asset.collision.buf);
- else
- {
- ui->lineEditCollision->setText(fileInfo.baseName() + "_New.repx");
- }
-
if (asset.llasset.buf != nullptr)
ui->lineEditLLAsset->setText(asset.llasset.buf);
else
@@ -158,8 +145,8 @@ void FileReferencesPanel::updateValues()
bValid = false;
ui->checkBoxFBX->setChecked(asset.exportFBX);
+ ui->checkBoxEmbedFBXCollision->setChecked(asset.embedFBXCollision);
ui->checkBoxObj->setChecked(asset.exportOBJ);
- ui->checkBoxCollision->setChecked(asset.exportCollision);
ui->checkBoxLLAsset->setChecked(asset.exportLLAsset);
ui->checkBoxTKAsset->setChecked(asset.exportTKAsset);
ui->checkBoxBPXA->setChecked(asset.exportBPXA);
@@ -204,147 +191,42 @@ void FileReferencesPanel::on_checkBoxFBX_stateChanged(int arg1)
return;
}
- SampleManager* pSampleManager = SampleManager::ins();
- if (pSampleManager == nullptr)
- {
- return;
- }
-
- BlastAsset* pBlastAsset = pSampleManager->getCurBlastAsset();
- if (pBlastAsset == nullptr)
- {
- return;
- }
-
- std::map<BlastAsset*, AssetList::ModelAsset>& AssetDescMap = pSampleManager->getAssetDescMap();
- std::map<BlastAsset*, AssetList::ModelAsset>::iterator itADM = AssetDescMap.find(pBlastAsset);
- if (itADM == AssetDescMap.end())
- {
- return;
- }
-
- AssetList::ModelAsset modelAsset = itADM->second;
- if (modelAsset.name.empty())
- {
+ BPPAsset* assetPtr = _getCurrentAsset();
+ if (nullptr == assetPtr)
return;
- }
- BPParams& projectParams = BlastProject::ins().getParams();
- BPPAssetArray& assetArray = projectParams.blast.blastAssets;
- int aaas = 0;
- for (; aaas < assetArray.arraySizes[0]; aaas++)
- {
- std::string assetname = assetArray.buf[aaas].name;
- if (assetname == modelAsset.name)
- break;
- }
- if (aaas == assetArray.arraySizes[0])
- {
- return;
- }
-
- BPPAsset& asset = assetArray.buf[aaas];
+ BPPAsset& asset = *assetPtr;
asset.exportFBX = ui->checkBoxFBX->isChecked();
}
-void FileReferencesPanel::on_checkBoxObj_stateChanged(int arg1)
+void FileReferencesPanel::on_checkBoxEmbedFBXCollision_stateChanged(int arg1)
{
if (!bValid)
{
return;
}
- SampleManager* pSampleManager = SampleManager::ins();
- if (pSampleManager == nullptr)
- {
- return;
- }
-
- BlastAsset* pBlastAsset = pSampleManager->getCurBlastAsset();
- if (pBlastAsset == nullptr)
- {
+ BPPAsset* assetPtr = _getCurrentAsset();
+ if (nullptr == assetPtr)
return;
- }
- std::map<BlastAsset*, AssetList::ModelAsset>& AssetDescMap = pSampleManager->getAssetDescMap();
- std::map<BlastAsset*, AssetList::ModelAsset>::iterator itADM = AssetDescMap.find(pBlastAsset);
- if (itADM == AssetDescMap.end())
- {
- return;
- }
-
- AssetList::ModelAsset modelAsset = itADM->second;
- if (modelAsset.name.empty())
- {
- return;
- }
-
- BPParams& projectParams = BlastProject::ins().getParams();
- BPPAssetArray& assetArray = projectParams.blast.blastAssets;
- int aaas = 0;
- for (; aaas < assetArray.arraySizes[0]; aaas++)
- {
- std::string assetname = assetArray.buf[aaas].name;
- if (assetname == modelAsset.name)
- break;
- }
- if (aaas == assetArray.arraySizes[0])
- {
- return;
- }
-
- BPPAsset& asset = assetArray.buf[aaas];
- asset.exportOBJ = ui->checkBoxObj->isChecked();
+ BPPAsset& asset = *assetPtr;
+ asset.embedFBXCollision = ui->checkBoxEmbedFBXCollision->isChecked();
}
-void FileReferencesPanel::on_checkBoxCollision_stateChanged(int arg1)
+void FileReferencesPanel::on_checkBoxObj_stateChanged(int arg1)
{
if (!bValid)
{
return;
}
- SampleManager* pSampleManager = SampleManager::ins();
- if (pSampleManager == nullptr)
- {
- return;
- }
-
- BlastAsset* pBlastAsset = pSampleManager->getCurBlastAsset();
- if (pBlastAsset == nullptr)
- {
- return;
- }
-
- std::map<BlastAsset*, AssetList::ModelAsset>& AssetDescMap = pSampleManager->getAssetDescMap();
- std::map<BlastAsset*, AssetList::ModelAsset>::iterator itADM = AssetDescMap.find(pBlastAsset);
- if (itADM == AssetDescMap.end())
- {
- return;
- }
-
- AssetList::ModelAsset modelAsset = itADM->second;
- if (modelAsset.name.empty())
- {
- return;
- }
-
- BPParams& projectParams = BlastProject::ins().getParams();
- BPPAssetArray& assetArray = projectParams.blast.blastAssets;
- int aaas = 0;
- for (; aaas < assetArray.arraySizes[0]; aaas++)
- {
- std::string assetname = assetArray.buf[aaas].name;
- if (assetname == modelAsset.name)
- break;
- }
- if (aaas == assetArray.arraySizes[0])
- {
+ BPPAsset* assetPtr = _getCurrentAsset();
+ if (nullptr == assetPtr)
return;
- }
- BPPAsset& asset = assetArray.buf[aaas];
- asset.exportCollision = ui->checkBoxCollision->isChecked();
+ BPPAsset& asset = *assetPtr;
+ asset.exportOBJ = ui->checkBoxObj->isChecked();
}
void FileReferencesPanel::on_checkBoxLLAsset_stateChanged(int arg1)
@@ -354,46 +236,11 @@ void FileReferencesPanel::on_checkBoxLLAsset_stateChanged(int arg1)
return;
}
- SampleManager* pSampleManager = SampleManager::ins();
- if (pSampleManager == nullptr)
- {
- return;
- }
-
- BlastAsset* pBlastAsset = pSampleManager->getCurBlastAsset();
- if (pBlastAsset == nullptr)
- {
- return;
- }
-
- std::map<BlastAsset*, AssetList::ModelAsset>& AssetDescMap = pSampleManager->getAssetDescMap();
- std::map<BlastAsset*, AssetList::ModelAsset>::iterator itADM = AssetDescMap.find(pBlastAsset);
- if (itADM == AssetDescMap.end())
- {
- return;
- }
-
- AssetList::ModelAsset modelAsset = itADM->second;
- if (modelAsset.name.empty())
- {
- return;
- }
-
- BPParams& projectParams = BlastProject::ins().getParams();
- BPPAssetArray& assetArray = projectParams.blast.blastAssets;
- int aaas = 0;
- for (; aaas < assetArray.arraySizes[0]; aaas++)
- {
- std::string assetname = assetArray.buf[aaas].name;
- if (assetname == modelAsset.name)
- break;
- }
- if (aaas == assetArray.arraySizes[0])
- {
+ BPPAsset* assetPtr = _getCurrentAsset();
+ if (nullptr == assetPtr)
return;
- }
- BPPAsset& asset = assetArray.buf[aaas];
+ BPPAsset& asset = *assetPtr;
asset.exportLLAsset = ui->checkBoxLLAsset->isChecked();
}
@@ -404,46 +251,11 @@ void FileReferencesPanel::on_checkBoxTKAsset_stateChanged(int arg1)
return;
}
- SampleManager* pSampleManager = SampleManager::ins();
- if (pSampleManager == nullptr)
- {
- return;
- }
-
- BlastAsset* pBlastAsset = pSampleManager->getCurBlastAsset();
- if (pBlastAsset == nullptr)
- {
+ BPPAsset* assetPtr = _getCurrentAsset();
+ if (nullptr == assetPtr)
return;
- }
- std::map<BlastAsset*, AssetList::ModelAsset>& AssetDescMap = pSampleManager->getAssetDescMap();
- std::map<BlastAsset*, AssetList::ModelAsset>::iterator itADM = AssetDescMap.find(pBlastAsset);
- if (itADM == AssetDescMap.end())
- {
- return;
- }
-
- AssetList::ModelAsset modelAsset = itADM->second;
- if (modelAsset.name.empty())
- {
- return;
- }
-
- BPParams& projectParams = BlastProject::ins().getParams();
- BPPAssetArray& assetArray = projectParams.blast.blastAssets;
- int aaas = 0;
- for (; aaas < assetArray.arraySizes[0]; aaas++)
- {
- std::string assetname = assetArray.buf[aaas].name;
- if (assetname == modelAsset.name)
- break;
- }
- if (aaas == assetArray.arraySizes[0])
- {
- return;
- }
-
- BPPAsset& asset = assetArray.buf[aaas];
+ BPPAsset& asset = *assetPtr;
asset.exportTKAsset = ui->checkBoxTKAsset->isChecked();
}
@@ -454,46 +266,11 @@ void FileReferencesPanel::on_checkBoxBPXA_stateChanged(int arg1)
return;
}
- SampleManager* pSampleManager = SampleManager::ins();
- if (pSampleManager == nullptr)
- {
+ BPPAsset* assetPtr = _getCurrentAsset();
+ if (nullptr == assetPtr)
return;
- }
- BlastAsset* pBlastAsset = pSampleManager->getCurBlastAsset();
- if (pBlastAsset == nullptr)
- {
- return;
- }
-
- std::map<BlastAsset*, AssetList::ModelAsset>& AssetDescMap = pSampleManager->getAssetDescMap();
- std::map<BlastAsset*, AssetList::ModelAsset>::iterator itADM = AssetDescMap.find(pBlastAsset);
- if (itADM == AssetDescMap.end())
- {
- return;
- }
-
- AssetList::ModelAsset modelAsset = itADM->second;
- if (modelAsset.name.empty())
- {
- return;
- }
-
- BPParams& projectParams = BlastProject::ins().getParams();
- BPPAssetArray& assetArray = projectParams.blast.blastAssets;
- int aaas = 0;
- for (; aaas < assetArray.arraySizes[0]; aaas++)
- {
- std::string assetname = assetArray.buf[aaas].name;
- if (assetname == modelAsset.name)
- break;
- }
- if (aaas == assetArray.arraySizes[0])
- {
- return;
- }
-
- BPPAsset& asset = assetArray.buf[aaas];
+ BPPAsset& asset = *assetPtr;
asset.exportBPXA = ui->checkBoxBPXA->isChecked();
if (asset.exportBPXA)
@@ -512,31 +289,58 @@ void FileReferencesPanel::on_btnSave_clicked()
copy(fileReferences.fbxSourceAsset, ui->lineEditFBXSourceAsset->text().toUtf8().data());
+ BPPAsset* assetPtr = _getCurrentAsset();
+ if (nullptr == assetPtr)
+ return;
+
+ BPPAsset& asset = *assetPtr;
+
+ copy(asset.fbx, ui->lineEditFBX->text().toUtf8().data());
+ asset.exportFBX = ui->checkBoxFBX->isChecked();
+
+ copy(asset.obj, ui->lineEditObj->text().toUtf8().data());
+ asset.exportOBJ = ui->checkBoxObj->isChecked();
+
+ copy(asset.llasset, ui->lineEditLLAsset->text().toUtf8().data());
+ asset.exportLLAsset = ui->checkBoxLLAsset->isChecked();
+
+ copy(asset.tkasset, ui->lineEditTKAsset->text().toUtf8().data());
+ asset.exportTKAsset = ui->checkBoxTKAsset->isChecked();
+
+ copy(asset.bpxa, ui->lineEditBPXA->text().toUtf8().data());
+ asset.exportBPXA = ui->checkBoxBPXA->isChecked();
+
+ SampleManager::ins()->exportAsset();
+}
+
+BPPAsset* FileReferencesPanel::_getCurrentAsset()
+{
SampleManager* pSampleManager = SampleManager::ins();
if (pSampleManager == nullptr)
{
- return;
+ return nullptr;
}
BlastAsset* pBlastAsset = pSampleManager->getCurBlastAsset();
if (pBlastAsset == nullptr)
{
- return;
+ return nullptr;
}
std::map<BlastAsset*, AssetList::ModelAsset>& AssetDescMap = pSampleManager->getAssetDescMap();
std::map<BlastAsset*, AssetList::ModelAsset>::iterator itADM = AssetDescMap.find(pBlastAsset);
if (itADM == AssetDescMap.end())
{
- return;
+ return nullptr;
}
AssetList::ModelAsset modelAsset = itADM->second;
if (modelAsset.name.empty())
{
- return;
+ return nullptr;
}
+ BPParams& projectParams = BlastProject::ins().getParams();
BPPAssetArray& assetArray = projectParams.blast.blastAssets;
int aaas = 0;
for (; aaas < assetArray.arraySizes[0]; aaas++)
@@ -547,28 +351,10 @@ void FileReferencesPanel::on_btnSave_clicked()
}
if (aaas == assetArray.arraySizes[0])
{
- return;
+ return nullptr;
}
BPPAsset& asset = assetArray.buf[aaas];
- copy(asset.fbx, ui->lineEditFBX->text().toUtf8().data());
- asset.exportFBX = ui->checkBoxFBX->isChecked();
-
- copy(asset.obj, ui->lineEditObj->text().toUtf8().data());
- asset.exportOBJ = ui->checkBoxObj->isChecked();
-
- copy(asset.collision, ui->lineEditCollision->text().toUtf8().data());
- asset.exportCollision = ui->checkBoxCollision->isChecked();
-
- copy(asset.llasset, ui->lineEditLLAsset->text().toUtf8().data());
- asset.exportLLAsset = ui->checkBoxLLAsset->isChecked();
-
- copy(asset.tkasset, ui->lineEditTKAsset->text().toUtf8().data());
- asset.exportTKAsset = ui->checkBoxTKAsset->isChecked();
-
- copy(asset.bpxa, ui->lineEditBPXA->text().toUtf8().data());
- asset.exportBPXA = ui->checkBoxBPXA->isChecked();
-
- SampleManager::ins()->exportAsset();
+ return &asset;
}
diff --git a/tools/ArtistTools/source/BlastPlugin/Window/FileReferencesPanel.h b/tools/ArtistTools/source/BlastPlugin/Window/FileReferencesPanel.h
index 71905df..9accf6a 100644
--- a/tools/ArtistTools/source/BlastPlugin/Window/FileReferencesPanel.h
+++ b/tools/ArtistTools/source/BlastPlugin/Window/FileReferencesPanel.h
@@ -7,6 +7,8 @@ namespace Ui {
class FileReferencesPanel;
}
+#include "ProjectParams.h"
+
class FileReferencesPanel : public QWidget
{
Q_OBJECT
@@ -27,9 +29,9 @@ public slots:
void on_checkBoxFBX_stateChanged(int arg1);
- void on_checkBoxObj_stateChanged(int arg1);
+ void on_checkBoxEmbedFBXCollision_stateChanged(int arg1);
- void on_checkBoxCollision_stateChanged(int arg1);
+ void on_checkBoxObj_stateChanged(int arg1);
void on_checkBoxLLAsset_stateChanged(int arg1);
@@ -40,6 +42,9 @@ public slots:
void on_btnSave_clicked();
private:
+ BPPAsset* _getCurrentAsset();
+
+private:
Ui::FileReferencesPanel *ui;
bool bValid;
};