WebGL 노트(둘)반들반들하다
8588 단어 WebGL
1.1 포인트 라이트 포인트 라이트 통과
위치 및
광선을 발사하여 정의합니다.
WebGl과 Three에 대응합니다.js의 빛:
1 . 빛의 거리가 무한원일 때, d=무한정일 때WebGL 안의 평행광에 대응하고Three에 대응한다.js 안의 방향광
//Three.js WebGL .
var uniforms = lightCache.get( light );
uniforms.color.copy( light.color ).multiplyScalar( light.intensity );
uniforms.direction.setFromMatrixPosition( light.matrixWorld );
_vector3.setFromMatrixPosition( light.target.matrixWorld );
uniforms.direction.sub( _vector3 );
uniforms.direction.transformDirection( viewMatrix );
2. 빛의 위치가 부분적일 때 WebGL과 Three에 대응한다.js 안의 점광원.
//Three.js WebGL .
var uniforms = lightCache.get( light );
uniforms.position.setFromMatrixPosition( light.matrixWorld );
uniforms.position.applyMatrix4( viewMatrix );
uniforms.color.copy( light.color ).multiplyScalar( light.intensity );
uniforms.distance = light.distance;
uniforms.decay = ( light.distance === 0 ) ? 0.0 : light.decay;
1.2 방향광 방향광은 *방향 벡터 * 및 *이 방향에서 시작되는 각도 범위 $\theta$*를 통해 결정됩니다(원추와 유사). $$cos\alpha= V_{obj}• V_{light}$$ $V_{obj}$는 광원에서 빛의 대상까지의 단위 방향 벡터를 나타낸다.
//Three.js .
var uniforms = lightCache.get( light );
uniforms.position.setFromMatrixPosition( light.matrixWorld );
uniforms.position.applyMatrix4( viewMatrix );
uniforms.color.copy( color ).multiplyScalar( intensity );
uniforms.distance = distance;
uniforms.direction.setFromMatrixPosition( light.matrixWorld );
_vector3.setFromMatrixPosition( light.target.matrixWorld );
uniforms.direction.sub( _vector3 );
uniforms.direction.transformDirection( viewMatrix );
uniforms.coneCos = Math.cos( light.angle );
uniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );
uniforms.decay = ( light.distance === 0 ) ? 0.0 : light.decay;
1.3 환경광은 장면의 밝기를 설정하여 환경광을 정의한다.모든 대상이 같은 환경광을 가지고 각 빛이 표면을 비추는 전체적인 만반사와 비슷하다.
Three.js 환경광의 구조 함수 정의: AmbientLight(color, intensity)
//Three.js .
r += color.r * intensity;
g += color.g * intensity;
b += color.b * intensity;
1.4Three.js 안의 다른 빛
//Three.js
var uniforms = lightCache.get( light );
uniforms.direction.setFromMatrixPosition( light.matrixWorld );
uniforms.direction.transformDirection( viewMatrix );
uniforms.direction.normalize();
uniforms.skyColor.copy( light.color ).multiplyScalar( intensity );
uniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity );
var uniforms = lightCache.get( light );
uniforms.color.copy( color ).multiplyScalar( intensity / ( light.width * light.height ) );
uniforms.position.setFromMatrixPosition( light.matrixWorld );
uniforms.position.applyMatrix4( viewMatrix );
_matrix42.identity();
_matrix4.copy( light.matrixWorld );
_matrix4.premultiply( viewMatrix );
_matrix42.extractRotation( _matrix4 );
uniforms.halfWidth.set( light.width * 0.5,0.0, 0.0 );
uniforms.halfHeight.set(0.0, light.height * 0.5, 0.0 );
uniforms.halfWidth.applyMatrix4( _matrix42 );
uniforms.halfHeight.applyMatrix4( _matrix42 );
2. 객체 표면 조명 효과
2.1 난반사가 거칠거나 입자형 표면은 반사광선을 각 방향으로 발산한다. 이런 반사를
만반사
만약 모든 표면이 이상적인 만반사체에 따라 대처한다면 서로 다른 광원이 만반사 아래에서 반사하는 빛의 강도는 다음과 같다.
2.2 거울면 반사 반사 광선이 눈에 띄거나 밝은 점으로 집중되어 **거울면 반사*가 된다.기존의 표면을 가정하면 법방향량은 N, L은 광원 방향, R은 반사광 방향, V는 시점 방향, L과 N의 협각 = R과 N의 협각 = $\theta, $R과 V의 협각은 $\phi$.*이상적인 거울면 반사재료*$\theta=\phi$일 때만 관찰자가 반사광을 볼 수 있습니다.
비이상 반사체 시스템 시스템의 반사 방향은 벡터 R 주위의 유한한 범위 내에 분포한다.비교적 매끄러운 반사 범위는 비교적 작고, 비교적 거친 반사 범위는 비교적 크다.Phong Bui Tuong은 거울의 범위를 계산하는 경험 공식을 제시하여 Phong의 반사 모델이 되었다.(Phong) I s p e c = W ( θ ) I l c o s n s ϕ (V·R < = 0 또는 N·L < = 0시, I s p e c = 0) I{spec}=W(\theta)I_lcos^{n s}\phi(V·R<=0 또는 N·L<=0시, I {spec}=0)\tag{Phong} Ispec=W(θ)Ilcosnsϕ(V·R<=0 또는 N·L<=0시, Ispec=0)(Phong)(W)θ ) 거울면 반사 계수를 나타내고 I l은 광원 강도를 나타낸다.ϕ 관찰방향 V와 반사방향 R의 협각을 나타낸다.N s는 미러 반사 매개변수를 나타내고 재료에 의해 결정됩니다(W (\theta)는 미러 반사 계수를 나타냅니다. Il은 광원의 강도를 나타내고\phi는 관찰방향 V와 반사방향 R의 협각을 나타낸다.N_s는 광택 반사 매개변수를 나타내며 재료에 의해 결정됨)(W(θ)미러 반사 계수를 나타내고 Il은 광원 강도를 나타냅니다.ϕ관찰방향 V와 반사방향 R의 협각을 나타낸다.Ns는 재료에 의해 결정되는 미러 반사 매개변수를 나타냅니다.
간략화된 Phong 모형은 V•R 대신 N•H를 사용할 수 있으며 H는 L과 V의 반각 벡터를 나타낼 수 있다.
2.3 만반사와 거울반사의 합병
(1) I = I d i f f + I s p e c I=I_{diff}+I_{spec}\tag{1} I=Idiff+Ispec(1) (2) = k a I a + k d I l ( N • L ) + W ( θ ) I l c o s n s ϕ =k_aI_a+k_dI_l(N• L)+W(\theta)I_lcos^{n_s}\phi\tag{2} =kaIa+kdIl(N•L)+W(θ)Ilcosnsϕ(2) (3) = k a I a + k d I l ( N • L ) + W ( θ ) I l ( N • H ) n s =k_aI_a+k_dI_l(N• L)+W(\theta)I_l(N• H)^{n_s}\tag{3} =kaIa+kdIl(N•L)+W(θ)Il(N•H)ns(3)
2.4 다광원의 만반사와 거울면 반사의 합병
(1) I = I a m b , d i f f + ∑ i = 0 n [ I l , d i f f + I l , s p e c ] I=I_{amb,diff} +\sum_{i=0}^{n}\[I_{l,diff}+I_{l,spec}]\tag{1} I=Iamb,diff+i=0∑n [Il,diff+Il,spec](1) (2) = k a I a + ∑ i = 0 n I l [ k d ( N • L ) + k s ( N • H ) n s ] =k_aI_a+\sum_{i=0}^{n}I_l[k_d(N• L)+k_s(N• H)^{n_s}]\tag{2} =kaIa+i=0∑nIl[kd(N•L)+ks(N•H)ns](2)
3. 표면 그리기 알고리즘
Gouraud 명암 처리
단점: 표면의 높은 빛은 때때로 이상한 모양이 나타날 수 있고 선형 빛의 강도 삽입값은 표면에 지나치게 밝거나 지나치게 어두운 줄무늬를 만들어 마하대 효과가 된다.
Phong 명암 처리
단점: Gouraud 방법보다 더 많은 계산이 필요합니다.
빠른 Phong 명암 처리(테일러 전시식) I d i f (x, y) = T 5 x 2 + T 4 x y + T 3 y 2 + T 2 x T 1 x T 0 Idiff(x,y) = T_5x^2+T_4xy+T_3y^2+T_2x+T_1y+T_0\tag{테일러 전시식} Id iff(x, y) = T5 x 2+T4 xy+T3 y2+T2 x+T1 y+T0(테일러 전시식) Tk는 빛의 방향과 각 정점의 빛의 강도를 확정하는 함수이다.T_k는 빛의 방향과 각 정점의 빛의 강도를 확정하는 함수이다.Tk는 빛의 방향과 각 정점의 빛의 강도에 의해 확정된 함수이다.
단점: 빠른 Phong 방법으로 Phong 표면 그리기 알고리즘의 계산량을 줄였지만 그 계산량은 Gouraud 표면 그리기 알고리즘의 두 배에 해당하는 시간이다.기본적인 Phong 표면 그리기 알고리즘은 Gouraud 그리기보다 6~7배 더 소모된다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Photon×WebGL(4) Cube를 직장인에게하고 싶은 일 2020으로 버전 업하여 매번 발생하는 사람 · 네트워크 객체가 생성되지 않음 · DefaultPool failed to load,,, => 네트워크 객체 오른쪽 클릭 → Reimport로 회피 이번에...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.