{"action":"created","comment":{"url":"https://api.github.com/repos/KhronosGroup/glTF/pulls/comments/225176662","pull_request_review_id":164717571,"id":225176662,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyNTE3NjY2Mg==","diff_hunk":"@@ -0,0 +1,127 @@\n+# EXT_lights_image_based\n+\n+## Contributors\n+\n+* Gary Hsu, Microsoft, <mailto:garyhsu@microsoft.com>\n+* Mike Bond, Adobe, <mailto:mbond@adobe.com>\n+\n+## Status\n+\n+Draft (not ratified yet)\n+\n+## Dependencies\n+\n+Written against the glTF 2.0 spec.\n+\n+## Overview\n+\n+This extension provides the ability to define image-based lights in a glTF scene. Image-based lights consist of an environment map that represents specular radiance for the scene as well as irradiance information.\n+\n+Many 3D tools and engines support image-based global illumination but the exact technique and data formats employed vary. Using this extension, tools can export and engines can import image-based lights and the result should be highly consistent. \n+\n+This extension specifies exactly one way to format and reference the environment map to be used as well as one format for HDR image encoding. The goals of this are two-fold. First, it makes implementing support for this extension easier. Secondly, it ensures that rendering of the image-based lighting is consistent across runtimes.\n+\n+A conforming implementation of this extension must be able to load the image-based environment data and render the PBR materials using this lighting. \n+\n+## Defining an Image-Based Light\n+\n+The EXT_lights_image_based extension defines an array of image-based lights at the root of the glTF and then each scene can reference one. Each image-based light definition consists of a single cubemap that describes the specular radiance of the scene, the l=2 spherical harmonics coefficients for diffuse irradiance and rotation and intensity values.\n+\n+```javascript\n+\"extensions\": {\n+    \"EXT_lights_image_based\" : {\n+        \"lights\": [\n+            {\n+                \"intensity\": 1.0,\n+                \"rotation\": [0, 0, 0, 1],\n+                \"irradianceCoefficients\": [...3 x 9 array of floats...],\n+                \"specularImageSize\": 256,\n+                \"specularImages\": [\n+                    [... 6 cube faces for mip 0 ...],\n+                    [... 6 cube faces for mip 1 ...],\n+                    ...\n+                    [... 6 cube faces for mip n ...]\n+                ],\n+            }\n+        ]\n+    }\n+}\n+```\n+\n+## Prefiltered Specular Radiance Cubemaps\n+\n+The cubemap used for specular radiance is defined along with its prefiltered mipmaps with each face of the cube defined as separate images. The various mip levels evenly map to roughness values from 0 to 1 in the PBR material and should be generated with a principled multi-scatter GGX normal distribution. The data in the maps represents illuminance in lux (lm/m^2).\n+\n+The entire mip chain of images should not be provided. Instead, the lowest-resolution mip should have sufficient size to represent the maximally-blurred radiance map (say, 16x16) corresponding to roughness=1. The `specularImageSize` value defines the largest dimension of mip 0 and, taken together with the number of defined mips, should give the loading runtime the information it needs to generate the remainder of the mip chain and sample the appropriate mip level in the shader.\n+\n+*(say something about tooling for generating these mips)*","path":"extensions/2.0/Vendor/EXT_lights_image_based/README.md","position":57,"original_position":57,"commit_id":"77f0cf701199cec586bfe852ed1c273c54cad743","original_commit_id":"77f0cf701199cec586bfe852ed1c273c54cad743","user":{"login":"emackey","id":1235080,"node_id":"MDQ6VXNlcjEyMzUwODA=","avatar_url":"https://avatars2.githubusercontent.com/u/1235080?v=4","gravatar_id":"","url":"https://api.github.com/users/emackey","html_url":"https://github.com/emackey","followers_url":"https://api.github.com/users/emackey/followers","following_url":"https://api.github.com/users/emackey/following{/other_user}","gists_url":"https://api.github.com/users/emackey/gists{/gist_id}","starred_url":"https://api.github.com/users/emackey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/emackey/subscriptions","organizations_url":"https://api.github.com/users/emackey/orgs","repos_url":"https://api.github.com/users/emackey/repos","events_url":"https://api.github.com/users/emackey/events{/privacy}","received_events_url":"https://api.github.com/users/emackey/received_events","type":"User","site_admin":false},"body":"Remaining TODO?","created_at":"2018-10-15T14:01:14Z","updated_at":"2018-10-15T14:10:16Z","html_url":"https://github.com/KhronosGroup/glTF/pull/1377#discussion_r225176662","pull_request_url":"https://api.github.com/repos/KhronosGroup/glTF/pulls/1377","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/KhronosGroup/glTF/pulls/comments/225176662"},"html":{"href":"https://github.com/KhronosGroup/glTF/pull/1377#discussion_r225176662"},"pull_request":{"href":"https://api.github.com/repos/KhronosGroup/glTF/pulls/1377"}}},"pull_request":{"url":"https://api.github.com/repos/KhronosGroup/glTF/pulls/1377","id":199542522,"node_id":"MDExOlB1bGxSZXF1ZXN0MTk5NTQyNTIy","html_url":"https://github.com/KhronosGroup/glTF/pull/1377","diff_url":"https://github.com/KhronosGroup/glTF/pull/1377.diff","patch_url":"https://github.com/KhronosGroup/glTF/pull/1377.patch","issue_url":"https://api.github.com/repos/KhronosGroup/glTF/issues/1377","number":1377,"state":"open","locked":false,"title":"EXT_lights_image_based extension","user":{"login":"MiiBond","id":1069125,"node_id":"MDQ6VXNlcjEwNjkxMjU=","avatar_url":"https://avatars1.githubusercontent.com/u/1069125?v=4","gravatar_id":"","url":"https://api.github.com/users/MiiBond","html_url":"https://github.com/MiiBond","followers_url":"https://api.github.com/users/MiiBond/followers","following_url":"https://api.github.com/users/MiiBond/following{/other_user}","gists_url":"https://api.github.com/users/MiiBond/gists{/gist_id}","starred_url":"https://api.github.com/users/MiiBond/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MiiBond/subscriptions","organizations_url":"https://api.github.com/users/MiiBond/orgs","repos_url":"https://api.github.com/users/MiiBond/repos","events_url":"https://api.github.com/users/MiiBond/events{/privacy}","received_events_url":"https://api.github.com/users/MiiBond/received_events","type":"User","site_admin":false},"body":"Here's a super rough pass of the IBL extension that I've been working on with Microsoft (@bghgary).\r\n\r\nIt needs a lot more info added, of course, but we thought we'd get it out there early.","created_at":"2018-07-05T17:46:08Z","updated_at":"2018-10-15T14:10:16Z","closed_at":null,"merged_at":null,"merge_commit_sha":"371b6ab4913490adf1b3bceffcd479b388a59188","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":253294730,"node_id":"MDU6TGFiZWwyNTMyOTQ3MzA=","url":"https://api.github.com/repos/KhronosGroup/glTF/labels/extension","name":"extension","color":"7fdadc","default":false},{"id":1062481347,"node_id":"MDU6TGFiZWwxMDYyNDgxMzQ3","url":"https://api.github.com/repos/KhronosGroup/glTF/labels/needs%20discussion","name":"needs discussion","color":"006b75","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/KhronosGroup/glTF/pulls/1377/commits","review_comments_url":"https://api.github.com/repos/KhronosGroup/glTF/pulls/1377/comments","review_comment_url":"https://api.github.com/repos/KhronosGroup/glTF/pulls/comments{/number}","comments_url":"https://api.github.com/repos/KhronosGroup/glTF/issues/1377/comments","statuses_url":"https://api.github.com/repos/KhronosGroup/glTF/statuses/77f0cf701199cec586bfe852ed1c273c54cad743","head":{"label":"MiiBond:EXT_lights_imageBased","ref":"EXT_lights_imageBased","sha":"77f0cf701199cec586bfe852ed1c273c54cad743","user":{"login":"MiiBond","id":1069125,"node_id":"MDQ6VXNlcjEwNjkxMjU=","avatar_url":"https://avatars1.githubusercontent.com/u/1069125?v=4","gravatar_id":"","url":"https://api.github.com/users/MiiBond","html_url":"https://github.com/MiiBond","followers_url":"https://api.github.com/users/MiiBond/followers","following_url":"https://api.github.com/users/MiiBond/following{/other_user}","gists_url":"https://api.github.com/users/MiiBond/gists{/gist_id}","starred_url":"https://api.github.com/users/MiiBond/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MiiBond/subscriptions","organizations_url":"https://api.github.com/users/MiiBond/orgs","repos_url":"https://api.github.com/users/MiiBond/repos","events_url":"https://api.github.com/users/MiiBond/events{/privacy}","received_events_url":"https://api.github.com/users/MiiBond/received_events","type":"User","site_admin":false},"repo":{"id":116835535,"node_id":"MDEwOlJlcG9zaXRvcnkxMTY4MzU1MzU=","name":"glTF","full_name":"MiiBond/glTF","private":false,"owner":{"login":"MiiBond","id":1069125,"node_id":"MDQ6VXNlcjEwNjkxMjU=","avatar_url":"https://avatars1.githubusercontent.com/u/1069125?v=4","gravatar_id":"","url":"https://api.github.com/users/MiiBond","html_url":"https://github.com/MiiBond","followers_url":"https://api.github.com/users/MiiBond/followers","following_url":"https://api.github.com/users/MiiBond/following{/other_user}","gists_url":"https://api.github.com/users/MiiBond/gists{/gist_id}","starred_url":"https://api.github.com/users/MiiBond/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MiiBond/subscriptions","organizations_url":"https://api.github.com/users/MiiBond/orgs","repos_url":"https://api.github.com/users/MiiBond/repos","events_url":"https://api.github.com/users/MiiBond/events{/privacy}","received_events_url":"https://api.github.com/users/MiiBond/received_events","type":"User","site_admin":false},"html_url":"https://github.com/MiiBond/glTF","description":"glTF – Runtime 3D Asset Delivery","fork":true,"url":"https://api.github.com/repos/MiiBond/glTF","forks_url":"https://api.github.com/repos/MiiBond/glTF/forks","keys_url":"https://api.github.com/repos/MiiBond/glTF/keys{/key_id}","collaborators_url":"https://api.github.com/repos/MiiBond/glTF/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/MiiBond/glTF/teams","hooks_url":"https://api.github.com/repos/MiiBond/glTF/hooks","issue_events_url":"https://api.github.com/repos/MiiBond/glTF/issues/events{/number}","events_url":"https://api.github.com/repos/MiiBond/glTF/events","assignees_url":"https://api.github.com/repos/MiiBond/glTF/assignees{/user}","branches_url":"https://api.github.com/repos/MiiBond/glTF/branches{/branch}","tags_url":"https://api.github.com/repos/MiiBond/glTF/tags","blobs_url":"https://api.github.com/repos/MiiBond/glTF/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/MiiBond/glTF/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/MiiBond/glTF/git/refs{/sha}","trees_url":"https://api.github.com/repos/MiiBond/glTF/git/trees{/sha}","statuses_url":"https://api.github.com/repos/MiiBond/glTF/statuses/{sha}","languages_url":"https://api.github.com/repos/MiiBond/glTF/languages","stargazers_url":"https://api.github.com/repos/MiiBond/glTF/stargazers","contributors_url":"https://api.github.com/repos/MiiBond/glTF/contributors","subscribers_url":"https://api.github.com/repos/MiiBond/glTF/subscribers","subscription_url":"https://api.github.com/repos/MiiBond/glTF/subscription","commits_url":"https://api.github.com/repos/MiiBond/glTF/commits{/sha}","git_commits_url":"https://api.github.com/repos/MiiBond/glTF/git/commits{/sha}","comments_url":"https://api.github.com/repos/MiiBond/glTF/comments{/number}","issue_comment_url":"https://api.github.com/repos/MiiBond/glTF/issues/comments{/number}","contents_url":"https://api.github.com/repos/MiiBond/glTF/contents/{+path}","compare_url":"https://api.github.com/repos/MiiBond/glTF/compare/{base}...{head}","merges_url":"https://api.github.com/repos/MiiBond/glTF/merges","archive_url":"https://api.github.com/repos/MiiBond/glTF/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/MiiBond/glTF/downloads","issues_url":"https://api.github.com/repos/MiiBond/glTF/issues{/number}","pulls_url":"https://api.github.com/repos/MiiBond/glTF/pulls{/number}","milestones_url":"https://api.github.com/repos/MiiBond/glTF/milestones{/number}","notifications_url":"https://api.github.com/repos/MiiBond/glTF/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/MiiBond/glTF/labels{/name}","releases_url":"https://api.github.com/repos/MiiBond/glTF/releases{/id}","deployments_url":"https://api.github.com/repos/MiiBond/glTF/deployments","created_at":"2018-01-09T15:41:54Z","updated_at":"2018-07-02T09:52:12Z","pushed_at":"2018-10-12T20:51:49Z","git_url":"git://github.com/MiiBond/glTF.git","ssh_url":"git@github.com:MiiBond/glTF.git","clone_url":"https://github.com/MiiBond/glTF.git","svn_url":"https://github.com/MiiBond/glTF","homepage":"","size":174566,"stargazers_count":1,"watchers_count":1,"language":"HTML","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"KhronosGroup:master","ref":"master","sha":"572117376e84c4139e18788a261abe32332fe2f2","user":{"login":"KhronosGroup","id":1608701,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE2MDg3MDE=","avatar_url":"https://avatars3.githubusercontent.com/u/1608701?v=4","gravatar_id":"","url":"https://api.github.com/users/KhronosGroup","html_url":"https://github.com/KhronosGroup","followers_url":"https://api.github.com/users/KhronosGroup/followers","following_url":"https://api.github.com/users/KhronosGroup/following{/other_user}","gists_url":"https://api.github.com/users/KhronosGroup/gists{/gist_id}","starred_url":"https://api.github.com/users/KhronosGroup/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KhronosGroup/subscriptions","organizations_url":"https://api.github.com/users/KhronosGroup/orgs","repos_url":"https://api.github.com/users/KhronosGroup/repos","events_url":"https://api.github.com/users/KhronosGroup/events{/privacy}","received_events_url":"https://api.github.com/users/KhronosGroup/received_events","type":"Organization","site_admin":false},"repo":{"id":7921466,"node_id":"MDEwOlJlcG9zaXRvcnk3OTIxNDY2","name":"glTF","full_name":"KhronosGroup/glTF","private":false,"owner":{"login":"KhronosGroup","id":1608701,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE2MDg3MDE=","avatar_url":"https://avatars3.githubusercontent.com/u/1608701?v=4","gravatar_id":"","url":"https://api.github.com/users/KhronosGroup","html_url":"https://github.com/KhronosGroup","followers_url":"https://api.github.com/users/KhronosGroup/followers","following_url":"https://api.github.com/users/KhronosGroup/following{/other_user}","gists_url":"https://api.github.com/users/KhronosGroup/gists{/gist_id}","starred_url":"https://api.github.com/users/KhronosGroup/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KhronosGroup/subscriptions","organizations_url":"https://api.github.com/users/KhronosGroup/orgs","repos_url":"https://api.github.com/users/KhronosGroup/repos","events_url":"https://api.github.com/users/KhronosGroup/events{/privacy}","received_events_url":"https://api.github.com/users/KhronosGroup/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/KhronosGroup/glTF","description":"glTF – Runtime 3D Asset Delivery","fork":false,"url":"https://api.github.com/repos/KhronosGroup/glTF","forks_url":"https://api.github.com/repos/KhronosGroup/glTF/forks","keys_url":"https://api.github.com/repos/KhronosGroup/glTF/keys{/key_id}","collaborators_url":"https://api.github.com/repos/KhronosGroup/glTF/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/KhronosGroup/glTF/teams","hooks_url":"https://api.github.com/repos/KhronosGroup/glTF/hooks","issue_events_url":"https://api.github.com/repos/KhronosGroup/glTF/issues/events{/number}","events_url":"https://api.github.com/repos/KhronosGroup/glTF/events","assignees_url":"https://api.github.com/repos/KhronosGroup/glTF/assignees{/user}","branches_url":"https://api.github.com/repos/KhronosGroup/glTF/branches{/branch}","tags_url":"https://api.github.com/repos/KhronosGroup/glTF/tags","blobs_url":"https://api.github.com/repos/KhronosGroup/glTF/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/KhronosGroup/glTF/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/KhronosGroup/glTF/git/refs{/sha}","trees_url":"https://api.github.com/repos/KhronosGroup/glTF/git/trees{/sha}","statuses_url":"https://api.github.com/repos/KhronosGroup/glTF/statuses/{sha}","languages_url":"https://api.github.com/repos/KhronosGroup/glTF/languages","stargazers_url":"https://api.github.com/repos/KhronosGroup/glTF/stargazers","contributors_url":"https://api.github.com/repos/KhronosGroup/glTF/contributors","subscribers_url":"https://api.github.com/repos/KhronosGroup/glTF/subscribers","subscription_url":"https://api.github.com/repos/KhronosGroup/glTF/subscription","commits_url":"https://api.github.com/repos/KhronosGroup/glTF/commits{/sha}","git_commits_url":"https://api.github.com/repos/KhronosGroup/glTF/git/commits{/sha}","comments_url":"https://api.github.com/repos/KhronosGroup/glTF/comments{/number}","issue_comment_url":"https://api.github.com/repos/KhronosGroup/glTF/issues/comments{/number}","contents_url":"https://api.github.com/repos/KhronosGroup/glTF/contents/{+path}","compare_url":"https://api.github.com/repos/KhronosGroup/glTF/compare/{base}...{head}","merges_url":"https://api.github.com/repos/KhronosGroup/glTF/merges","archive_url":"https://api.github.com/repos/KhronosGroup/glTF/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/KhronosGroup/glTF/downloads","issues_url":"https://api.github.com/repos/KhronosGroup/glTF/issues{/number}","pulls_url":"https://api.github.com/repos/KhronosGroup/glTF/pulls{/number}","milestones_url":"https://api.github.com/repos/KhronosGroup/glTF/milestones{/number}","notifications_url":"https://api.github.com/repos/KhronosGroup/glTF/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/KhronosGroup/glTF/labels{/name}","releases_url":"https://api.github.com/repos/KhronosGroup/glTF/releases{/id}","deployments_url":"https://api.github.com/repos/KhronosGroup/glTF/deployments","created_at":"2013-01-30T19:01:11Z","updated_at":"2018-10-15T14:09:54Z","pushed_at":"2018-10-15T13:53:24Z","git_url":"git://github.com/KhronosGroup/glTF.git","ssh_url":"git@github.com:KhronosGroup/glTF.git","clone_url":"https://github.com/KhronosGroup/glTF.git","svn_url":"https://github.com/KhronosGroup/glTF","homepage":"","size":167421,"stargazers_count":2558,"watchers_count":2558,"language":"HTML","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":480,"mirror_url":null,"archived":false,"open_issues_count":157,"license":null,"forks":480,"open_issues":157,"watchers":2558,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/KhronosGroup/glTF/pulls/1377"},"html":{"href":"https://github.com/KhronosGroup/glTF/pull/1377"},"issue":{"href":"https://api.github.com/repos/KhronosGroup/glTF/issues/1377"},"comments":{"href":"https://api.github.com/repos/KhronosGroup/glTF/issues/1377/comments"},"review_comments":{"href":"https://api.github.com/repos/KhronosGroup/glTF/pulls/1377/comments"},"review_comment":{"href":"https://api.github.com/repos/KhronosGroup/glTF/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/KhronosGroup/glTF/pulls/1377/commits"},"statuses":{"href":"https://api.github.com/repos/KhronosGroup/glTF/statuses/77f0cf701199cec586bfe852ed1c273c54cad743"}},"author_association":"NONE"}}
{"actor":{"display_login":"emackey"}}