Skip to content

Commit a2d6c5e

Browse files
committed
Fix bad merge
Signed-off-by: Chris Kulla <[email protected]>
1 parent 029467e commit a2d6c5e

File tree

1 file changed

+0
-117
lines changed

1 file changed

+0
-117
lines changed

src/testrender/simpleraytracer.cpp

Lines changed: 0 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -1338,123 +1338,6 @@ SimpleRaytracer::prepare_render()
13381338
}
13391339
}
13401340

1341-
bool have_displacement = false;
1342-
for (const Material& m : shaders()) {
1343-
if (m.disp) {
1344-
have_displacement = true;
1345-
break;
1346-
}
1347-
}
1348-
if (have_displacement) {
1349-
errhandler().infofmt("Evaluating displacement shaders");
1350-
// Loop through all triangles and run displacement shader if there is one
1351-
// or copy the input point if there is none
1352-
std::vector<Vec3> disp_verts(scene.verts.size(), Vec3(0, 0, 0));
1353-
std::vector<int> valance(scene.verts.size(), 0);
1354-
// ^ number of times each vertex has been displaced
1355-
1356-
OSL::PerThreadInfo* thread_info = shadingsys->create_thread_info();
1357-
ShadingContext* ctx = shadingsys->get_context(thread_info);
1358-
1359-
bool has_smooth_normals = false;
1360-
for (int primID = 0, nprims = scene.triangles.size(); primID < nprims;
1361-
primID++) {
1362-
Vec3 p[3], n[3];
1363-
Vec2 uv[3];
1364-
1365-
p[0] = scene.verts[scene.triangles[primID].a];
1366-
p[1] = scene.verts[scene.triangles[primID].b];
1367-
p[2] = scene.verts[scene.triangles[primID].c];
1368-
1369-
valance[scene.triangles[primID].a]++;
1370-
valance[scene.triangles[primID].b]++;
1371-
valance[scene.triangles[primID].c]++;
1372-
1373-
int shaderID = scene.shaderid(primID);
1374-
if (shaderID < 0 || !m_shaders[shaderID].disp) {
1375-
disp_verts[scene.triangles[primID].a] += p[0];
1376-
disp_verts[scene.triangles[primID].b] += p[1];
1377-
disp_verts[scene.triangles[primID].c] += p[2];
1378-
continue;
1379-
}
1380-
1381-
1382-
Vec3 Ng = (p[0] - p[1]).cross(p[0] - p[2]);
1383-
float area = 0.5f * Ng.length();
1384-
Ng = Ng.normalize();
1385-
if (scene.n_triangles[primID].a >= 0) {
1386-
n[0] = scene.normals[scene.n_triangles[primID].a];
1387-
n[1] = scene.normals[scene.n_triangles[primID].b];
1388-
n[2] = scene.normals[scene.n_triangles[primID].c];
1389-
has_smooth_normals = true;
1390-
} else {
1391-
n[0] = n[1] = n[2] = Ng;
1392-
}
1393-
1394-
if (scene.uv_triangles[primID].a >= 0) {
1395-
uv[0] = scene.uvs[scene.uv_triangles[primID].a];
1396-
uv[1] = scene.uvs[scene.uv_triangles[primID].b];
1397-
uv[2] = scene.uvs[scene.uv_triangles[primID].c];
1398-
} else {
1399-
uv[0] = uv[1] = uv[2] = Vec2(0, 0);
1400-
}
1401-
1402-
// displace each vertex
1403-
for (int i = 0; i < 3; i++) {
1404-
ShaderGlobals sg;
1405-
sg.P = p[i];
1406-
sg.Ng = Ng;
1407-
sg.N = n[i];
1408-
sg.u = uv[i].x;
1409-
sg.v = uv[i].y;
1410-
sg.I = (p[i] - camera.eye).normalize();
1411-
sg.surfacearea = area;
1412-
sg.renderstate = &sg;
1413-
shadingsys->execute(*ctx, *m_shaders[shaderID].disp, sg);
1414-
p[i] = sg.P;
1415-
}
1416-
disp_verts[scene.triangles[primID].a] += p[0];
1417-
disp_verts[scene.triangles[primID].b] += p[1];
1418-
disp_verts[scene.triangles[primID].c] += p[2];
1419-
}
1420-
1421-
// release context
1422-
shadingsys->release_context(ctx);
1423-
shadingsys->destroy_thread_info(thread_info);
1424-
1425-
// average each vertex by the number of times it was displaced
1426-
for (int i = 0, n = scene.verts.size(); i < n; i++) {
1427-
if (valance[i] > 0)
1428-
disp_verts[i] /= float(valance[i]);
1429-
else
1430-
disp_verts[i] = scene.verts[i];
1431-
}
1432-
// replace old data with the new
1433-
scene.verts = std::move(disp_verts);
1434-
1435-
if (has_smooth_normals) {
1436-
// Recompute the vertex normals (if we had some)
1437-
std::vector<Vec3> disp_normals(scene.normals.size(), Vec3(0, 0, 0));
1438-
for (int primID = 0, nprims = scene.triangles.size();
1439-
primID < nprims; primID++) {
1440-
if (scene.n_triangles[primID].a >= 0) {
1441-
Vec3 p[3];
1442-
p[0] = scene.verts[scene.triangles[primID].a];
1443-
p[1] = scene.verts[scene.triangles[primID].b];
1444-
p[2] = scene.verts[scene.triangles[primID].c];
1445-
// don't normalize to weight by area
1446-
Vec3 Ng = (p[0] - p[1]).cross(p[0] - p[2]);
1447-
disp_normals[scene.n_triangles[primID].a] += Ng;
1448-
disp_normals[scene.n_triangles[primID].b] += Ng;
1449-
disp_normals[scene.n_triangles[primID].c] += Ng;
1450-
}
1451-
}
1452-
for (Vec3& n : disp_normals)
1453-
n = n.normalize();
1454-
scene.normals = std::move(disp_normals);
1455-
}
1456-
}
1457-
14581341
// build bvh and prepare triangles
14591342
scene.prepare(errhandler());
14601343
prepare_lights();

0 commit comments

Comments
 (0)